为什么“for”在批处理文件中不起作用? (外面工作正常)

时间:2011-08-26 21:33:24

标签: windows batch-file dos

for /F "tokens=*" %* in (Test.txt) do md ".\%*" & cd "%*" & md "Something1" & md "Something2" & cd ".."

DOS命令将从文本文件中提取名称并创建一个命名文件夹,然后创建两个子文件夹。

Apple {
{1}} {
{1}}

但是当我把它放入批处理文件中时如下:

-Something1

然后从Windows GUI运行它,屏幕弹出,关闭,什么都不做。即使我用工作DOS命令创建一个批处理它也什么都不做。我错过了什么?

谢谢。

2 个答案:

答案 0 :(得分:6)

在批处理文件中,您需要将for变量中的'%'加倍。不要问我为什么。 :)

答案 1 :(得分:2)

这种变化对我有用:

setlocal enabledelayedexpansion
for /F "tokens=*" %%g in ('type foo.txt') do (
                md ".\%%g"
                cd "%%g"
                md "Something1"
                md "Something2"
                cd ".."
        )
endlocal

我选择将一系列命令放在括号和一行之间。您的& - 分离命令链也应该可以正常工作。

setlocal / endlocal块限制了变量的范围。 enabledelayedexpansion参数在cmd中启用了一些额外功能。通常不需要它,因为它是CMD的默认值,但是默认值可能已经通过策略更改,因此包含它是一种很好的做法。

我更喜欢在脚本中使用pushd / popd而不是cd blah / cd ..。我认为它更强大。