我在批处理脚本中存在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命令不起作用?
我在批处理脚本中存在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命令不起作用?
它看起来像%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
也许这就是问题所在。我将尝试在运行时检查comspec – BerY
不要这样做。您可以通过for /f
获得遍及dir
输出的各种问题。而不是仅仅使用
for %g in (*) do @echo %g
okej,但是当使用任何其他命令(如'git status')时,为什么我会得到相同的错误? Git被添加到路径中,我可以在没有问题的情况下使用它的cmd,但是当我在循环中使用它时,我会收到此消息。 – BerY
如果使用'dir/b',则在for/f循环中迭代dir非常好。 – SomethingDark
@SomethingDark:玩得开心。当然可以用适当的'delims'来解决这些问题。在控制台窗口中使用光栅字体获得Unicode文件名称的乐趣,然后。这有点像问*“为什么我会使用'Directory.GetFiles',如果我还可以启动'cmd/c dir/b'并解析它的输出?«* – Joey
在你的问题,你说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)。
错误信息本来就是”g是意外的此时。”在那种情况下,虽然。 – Joey
'dir'需要反引号。请参阅'help for'的输出。 –
@a_horse_with_no_name:仅限于''usebackq“'。否则,单引号是好的。 – Joey
我猜你的批处理文件包含的代码比只有这一行更多?也许错误是其他地方造成的......? – aschipfl