Batch file 从批处理脚本中的FOR循环中为变量赋值
我编写了一个批处理脚本,以获取目录中包括子文件夹在内的所有pdf文件,但我想知道是否可以在其他变量中分配Batch file 从批处理脚本中的FOR循环中为变量赋值,batch-file,Batch File,我编写了一个批处理脚本,以获取目录中包括子文件夹在内的所有pdf文件,但我想知道是否可以在其他变量中分配%%x的值,如set temp=%%~na @echo off setlocal enabledelayedexpansion setlocal for /r %%a in (*.pdf) do ( echo %%~na ) endlocal 几乎和你的一模一样 @echo off setlocal enabledelayedexpansion for /R %%a in (*.p
%%x
的值,如set temp=%%~na
@echo off
setlocal enabledelayedexpansion
setlocal
for /r %%a in (*.pdf) do (
echo %%~na
)
endlocal
几乎和你的一模一样
@echo off
setlocal enabledelayedexpansion
for /R %%a in (*.pdf) do (
set "var=%%~na"
echo !var!
)
您不必endlocal
,因为在本例中,脚本完成时它将结束
第二次执行
setlocal
是一个问题。一开始启用delayedexpansion
时,您确实设置了setlocal
,但话说回来,您从未使用过它。查看setlocal/?
您会注意到使用code>而不是%
来告诉系统在延迟的环境扩展中应该使用哪些变量。您刚才在代码上面的示例中这样做了,尽管不鼓励使用特殊变量,如temp
或tmp
,因为其他程序正在使用它来查找用户临时文件夹的路径,但这是一种方法,您只需要将分配放入循环中。但是,您肯定不想为了赋值而将%%x的值赋值给变量,所以请解释赋值的原因,以及该赋值的目的,更重要的是,你做了什么来实现这个目标?这样做会遇到什么问题?另一点:在赋值中不要在等号周围使用空格,batch与你可能使用过的其他语言/脚本不同,在batch/cmd中,这些额外的空格将成为变量/值的一部分。作为一种最佳实践,始终尝试将整个作业置于引号之间。类似这样:设置“MyVar=Value”
值得一提的是,一旦循环完成,上面的设置将只保存变量%var%
中最后一个.pdf
的值。此外,由于该值使用了%%~na
修饰符,并且您正在为循环运行R
ecursive,因此保留的值将只提供.pdf
文件的名称,而不提供其d
驱动、p
ath或ex
张力。这意味着您实际上不知道该文件相对于当前工作目录的位置。如果需要其他修改器信息,请在命令提示下输入以获取/?
。