2009-05-25 50 views
2

我需要知道如何從用戶輸入的文件中提取目錄信息,考慮下面的代碼爲例:[NT Batch]如何從用戶輸入的文件中獲取目錄?


ECHO Drag and drop your .txt file here, after that press Enter: 
SET txtfile= 
SET /P txtfile= 
ECHO. 
CD %txtfile% 

ofcourse沒有工作,因爲我沒有從%提取文件路徑txtfile% 這裏的示例輸出我想:

 
C:\>Drag and drop your .txt file here, after that press Enter: 
C:\somefolder\somesubfolder\somefile.txt 
C:\>Press Enter to continue... 

C:\somefolder\somesubfolder\> 

注意到它有變化它的工作目錄

回答

2

您可以提取的完整路徑如下:

@echo off 
setlocal 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo. 
for %%i in (%txtfile%) do set txtdir=%%~dpi 
for %%i in (%txtfile%) do set txtfil=%%~nxi 
cd /d %txtdir% 
dir %txtfil% 
endlocal 

第一個for語句獲取驅動器和路徑,第二個獲取文件名和擴展名。我用cd /d來更改驅動器目錄,並使用setlocal/endlocal來保存腳本以外的路徑(如果您不在意,可以將其刪除)。

可以通過運行「for /?」來找到各種〜修飾符。在命令窗口中。它確實是一個強大的命令,並且這些修飾符不限於「for」,它們也可以用於任何%1類型的參數。

+0

偉大的工作:d感謝 – Dels 2009-05-25 09:34:12

1
ECHO Drag and drop your .txt file here, after that press Enter: 
SET txtfile= 
SET /P txtfile= 
ECHO. 
CD %txtfile%\.. 

我真的不知道爲什麼,但是這個工程在XP中,也可以在NT工作。

+1

它的工作原理,因爲XP腦死亡cd命令進行簡單的文本換人去掉 」。」和「..」條目。如果有誰能夠認真對待微軟的錯誤,那麼有朝一日會有用嗎? – paxdiablo 2009-05-25 09:02:51

+0

在XP中工作謝謝,不知道大約NT – Dels 2009-05-25 09:33:53

0

這個問題的答案是用來採取什麼樣一個人說,並修改它...

paxdiablo是在正確的道路上,但沒有被拷貝/ pasteable。爲了他的工作正常(也許它只是爲了我運行Windows7),你需要2個文件。

的第一個文件:drag_drop.bat

@echo off 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo.%txtfile% 
call c:\temp\process_filename.bat %txtfile% 

第二個文件:process_filename.bat

FOR %%i in (%txtfile%) do set txtdir=%~dp1 
cmd /K "cd %txtdir%" 

我不得不使用2檔的原因是因爲它的觸發%〜DP1(從paxdiablo語法是錯誤的 - 沒有冒險我知道你有187k代表,我給你的道具[你有%%〜dpi,在回聲中使用%%來禁用特殊字符'%'和dp1是分界符允許您從文件名中去除引號,文件路徑 - 與%%〜nxi相同的內容])

無論如何,您需要調用批處理文件傳遞其他文件名。這是第二個進來的地方。這個去除必要的信息,然後允許你訪問該路徑,然後在你的cmd提示符下打開該目錄。

或者

您可以從同一個文件中做到這一點...

@echo off 
setlocal 
IF '%process%'=='1' goto processFile 
echo Drag and drop your .txt file here, after that press Enter: 
set txtfile= 
set /p txtfile= 
echo.%txtfile% 
set process=1 
call c:\temp\dragdrop.bat %txtfile% 

:processFile 
set txtdir= 
FOR %%1 in (%txtfile%) do set txtdir=%~dp1 
cmd /K "cd %txtdir%" 
endlocal