我在批处理脚本中有循环的问题。 当我尝试:
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)。