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 从批处理脚本中的FOR循环中为变量赋值_Batch File - Fatal编程技术网

Batch file 从批处理脚本中的FOR循环中为变量赋值

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

我编写了一个批处理脚本,以获取目录中包括子文件夹在内的所有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 (*.pdf) do (
   set "var=%%~na"
   echo !var!
)
您不必
endlocal
,因为在本例中,脚本完成时它将结束


第二次执行
setlocal
是一个问题。一开始启用
delayedexpansion
时,您确实设置了
setlocal
,但话说回来,您从未使用过它。查看
setlocal/?
您会注意到
而不是
%
来告诉系统在延迟的环境扩展中应该使用哪些变量。

您刚才在代码上面的示例中这样做了,尽管不鼓励使用特殊变量,如
temp
tmp
,因为其他程序正在使用它来查找用户临时文件夹的路径,但这是一种方法,您只需要将分配放入循环中。但是,您肯定不想为了赋值而将
%%x的值赋值给变量,所以请解释赋值的原因,以及该赋值的目的,更重要的是,你做了什么来实现这个目标?这样做会遇到什么问题?另一点:在赋值中不要在等号周围使用空格,batch与你可能使用过的其他语言/脚本不同,在batch/cmd中,这些额外的空格将成为变量/值的一部分。作为一种最佳实践,始终尝试将整个作业置于引号之间。类似这样:
设置“MyVar=Value”
值得一提的是,一旦循环完成,上面的设置将只保存变量
%var%
中最后一个
.pdf
的值。此外,由于该值使用了
%%~na
修饰符,并且您正在为
循环运行
R
ecursive
,因此保留的值将只提供
.pdf
文件的名称,而不提供其
d
驱动、
p
ath或e
x
张力。这意味着您实际上不知道该文件相对于当前工作目录的位置。如果需要其他修改器信息,请在命令提示下输入
以获取/?