5

我是批处理文件的新手,我正在尝试编写一个来完成我的部分工作(我知道懒惰)

到目前为止,我有以下...

SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i
echo %TgtDir% >> C:\result.txt
)

Repos.txt 的内容是:

60000
C:\somedir\someotherdir\
C:\a\b\c\

基本上我希望这个脚本通过一个文件,忽略稍后将用于延迟设置的第一行,然后提取每一行然后(理想情况下)将它传递给 cd 命令但现在我只是想得到它进入变量 TgtDir。

当我运行此脚本时,C:\result.txt 中的输出为:

ECHO is on.
ECHO is on.

有什么帮助吗?

4

2 回答 2

10

您需要查看批处理文件的EnableDelayedExpansion选项。从上述链接:

使用 FOR 循环时,延迟变量扩展通常很有用。通常,即使它跨越批处理脚本的多行,整个 FOR 循环也会作为单个命令进行评估。

所以你的脚本最终看起来像这样:

@echo off
setlocal enabledelayedexpansion
SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i
    echo !TgtDir! >> C:\result.txt
)

作为替代方案,只需%%i在内部循环中使用变量,而不是创建新变量。

于 2012-09-20T13:41:20.357 回答
0
@echo off
setlocal enabledelayedexpansion
SET skip=1
REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt
于 2014-05-01T19:27:21.037 回答