2010-02-10 63 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的名称部分)