2010-02-10 66 views
1

我使用DOS批處理使用傳遞的參數,其處理的文件:擴大任意可變的驅動器,路徑等在DOS批處理

process.bat "D:\PROJECT\TEST FILES\test.pdf" 72 

process.bat:

gswin32c -r%2 -sDEVICE=jpeg -sOutputFile="%~n1-%%d.jpg" -- "%~1" 

我們可以看到該參數已擴展爲批次中的文件名:%~n1。 但是我被要求重寫一批從文本文件中讀取參數:

params.txt

1 D:\PROJECT\TEST FILES\test.pdf 
2 72 

所以我已經修改了process.bat

for /f "tokens=1,*" %%A in ('type ..\params.txt') do set P%%A=%%B 
gswin32c -r%P1% -sDEVICE=jpeg -sOutputFile="%~nP2%-%%d.jpg" -- "%~1" 

但%〜nP2%不起作用。

我發現for /f "tokens=*" %%A in (%P1%) do %%~dA可以幫助我,但看起來很麻煩。

那麼有沒有其他方法可以將任意變量擴展爲名稱,驅動器,路徑等?

+0

FWIW,我沒有回頭,因爲我停筆批處理文件,並開始使用JavaScript和的Cscript.exe 。 – 2010-02-10 16:34:27

+0

好的建議。會試試看。 – Max 2010-02-10 17:20:32

+0

很高興這是有幫助的。重新使用JavaScript:腳本很難運行('cscript/nologo myname.js'),但你可以解決這個問題。我通過爲我的命令腳本使用擴展名「jx」來完成它。要進行設置,請右鍵單擊這樣的文件並告訴Windows使用'c:\ windows \ system32 \ cscript.exe'打開它。然後使用regedit通過轉到HKCR \ jx_auto_file \ shell \ open \ command並將默認鍵值更改爲'「c:\ WINDOWS \ system32 \ cscript.exe」來改變該類型的「打開」命令/ e:JavaScript/nologo「%1」'。快樂的編碼。 :-) – 2010-02-11 10:32:22

回答

2

是的,那些只適用於特殊的基於數字的參數。但是可以通過將變量傳遞給批處理文件中的子例程來將變量變爲一個變量。例如:

@echo off 
set P1=D:\PROJECT\TEST FILES\test.pdf 
call :Split %P1% 
echo %FNAME% 
exit /b 0 

:Split 
set FNAME=%~n1 
exit /b 0 

...打印「TEST」(檢驗.pdf的名稱部分)