Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在DOS批处理中将任意变量扩展到驱动器、路径等_Batch File_Variable Expansion - Fatal编程技术网

Batch file 在DOS批处理中将任意变量扩展到驱动器、路径等

Batch file 在DOS批处理中将任意变量扩展到驱动器、路径等,batch-file,variable-expansion,Batch File,Variable Expansion,我使用的是dos批处理,它使用传递的参数处理文件: process.bat "D:\PROJECT\TEST FILES\test.pdf" 72 process.bat: 我们可以看到,该参数已扩展为批处理中的文件名:%~n1。 但是,我被要求重写批处理以从文本文件读取参数: params.txt 因此,我修改了流程。bat: 但是%2%不起作用 我发现,for/f“tokens=*”%%A in(%P1%)do%%~dA可以帮助我,但它看起来很麻烦 那么,还有其他方法可以将任意变量扩展为名

我使用的是dos批处理,它使用传递的参数处理文件:

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

我们可以看到,该参数已扩展为批处理中的文件名:
%~n1
。 但是,我被要求重写批处理以从文本文件读取参数:

params.txt

因此,我修改了流程。bat:

但是%2%不起作用

我发现,
for/f“tokens=*”%%A in(%P1%)do%%~dA
可以帮助我,但它看起来很麻烦


那么,还有其他方法可以将任意变量扩展为名称、驱动器、路径等吗?

是的,这些方法只适用于特殊的基于数字的参数。但是,通过将变量传递给批处理文件中的子例程,可以将变量转换为一个变量。例如:

@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”(TEST.pdf的名称部分)

FWIW,自从我停止编写批处理文件并开始使用带有cscript.exe的JavaScript以来,我就再也没有回过头来过。很好的建议。我会试一试的。很高兴这有帮助。重新使用JavaScript:脚本运行起来很痛苦(
cscript/nologomyname.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”
。快乐编码::-)
1 D:\PROJECT\TEST FILES\test.pdf
2 72
for /f "tokens=1,*" %%A in ('type ..\params.txt') do set P%%A=%%B
gswin32c -r%P1% -sDEVICE=jpeg -sOutputFile="%~nP2%-%%d.jpg" -- "%~1"
@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