2015-09-11 199 views
1

我在批处理脚本中存在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. 

我错过somethig?为什么Windows命令不起作用?

+0

'dir'需要反引号。请参阅'help for'的输出。 –

+3

@a_horse_with_no_name:仅限于''usebackq“'。否则,单引号是好的。 – Joey

+1

我猜你的批处理文件包含的代码比只有这一行更多?也许错误是其他地方造成的......? – aschipfl

回答

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 
+0

也许这就是问题所在。我将尝试在运行时检查comspec – BerY

1

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

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

okej,但是当使用任何其他命令(如'git status')时,为什么我会得到相同的错误? Git被添加到路径中,我可以在没有问题的情况下使用它的cmd,但是当我在循环中使用它时,我会收到此消息。 – BerY

+0

如果使用'dir/b',则在for/f循环中迭代dir非常好。 – SomethingDark

+0

@SomethingDark:玩得开心。当然可以用适当的'delims'来解决这些问题。在控制台窗口中使用光栅字体获得Unicode文件名称的乐趣,然后。这有点像问*“为什么我会使用'Directory.GetFiles',如果我还可以启动'cmd/c dir/b'并解析它的输出?«* – Joey

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输出更改为裸格式(无标题广告页脚,仅限文件和dir.s)。

+1

错误信息本来就是”g是意外的此时。”在那种情况下,虽然。 – Joey