循环的批处理脚本

时间:2015-09-11 14:49:36

标签: windows loops batch-file command-line cmd

我在批处理脚本中遇到for循环问题。 当我尝试:

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命令不起作用?

3 个答案:

答案 0 :(得分:1)

不要这样做。通过dir迭代for /f输出会出现各种问题。而只是使用

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

答案 1 :(得分:1)

在您的问题中,您声明echo %g%哪个错误(将逐字逐句地返回%。)

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

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

当您在批处理文件中使用for时,您的变量需要加倍%

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

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

/B开关将dir输出更改为裸格式(无页眉广告页脚,仅文件和目录。)

答案 2 :(得分:0)

看起来%comspec%变量已被隐藏或更改,但无法找到cmd.exe

测试此项以查看错误,并在工作机器上删除第2行以使其正常工作。

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

非常有趣的是cmd.exe的路径被缓存 下面的两个脚本是相同的,仅更改了命令的顺序

此批处理文件将因两个for命令

而失败
@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

此批处理文件将与for命令一起使用。

@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