批处理循环脚本

我在批处理脚本中有循环的问题。 当我尝试:

for /f "delims=;" %g in ('dir') do echo %g% 

我看到这个

 'dir' is not recognized as an internal or external command, operable program or batch file. 

我错过了一些事情吗? 为什么Windows命令不起作用?

它看起来像%comspec%变量已被%comspec%或更改,它找不到cmd.exe

测试这个看到的错误,并删除第2行为它工作正常,在工作机器上。

 @echo off set comspec=c:\aaa for /f "delims=;" %%g in ('dir') do echo %%g pause 

有趣的是,cmd.exe的路径被缓存。
下面的两个脚本与只更改命令的顺序相同

这个批处理文件将失败与两个命令

 @echo off set comspec=c:\aaa for /f "delims=;" %%g in ('dir') do echo %%g pause set "comspec=%windir%\System32\cmd.exe" for /f "delims=;" %%g in ('dir') do echo %%g pause 

而这个批处理文件可以同时处理两个命令。

 @echo off set "comspec=%windir%\System32\cmd.exe" for /f "delims=;" %%g in ('dir') do echo %%g pause set comspec=c:\aaa for /f "delims=;" %%g in ('dir') do echo %%g pause 

不要这样做。 你可以通过for /f获得遍历dir输出的各种问题。 而只是使用

 for %g in (*) do @echo %g 

在你的问题你说echo %g%这是错误的(后面的%将被直接返回)。

当命令直接输入命令提示符时,使用:

 for /f "delims=" %g in ('dir /B') do echo %g 

当你在一个批处理文件中使用时for你需要使用double- %作为变量:

 for /f "delims=" %%g in ('dir /B') do echo %%g 

选项delims=; 因为dir没有给出以分号分隔的列表,所以我停用了delims

/B开关将dir输出更改为裸格式(没有页眉,页脚,只有文件和dir.s)。