2012-09-20 44 views
5

用我新的批处理文件,我试着写一个做我的工作的一部分(我知道偷懒右)CMD从文件中获取字符串,并将其设置为可变的CD

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

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\ 

基本上我想这个剧本要经过一个文件,忽略其将用于第一线稍后设置延迟,并提取每行n(理想情况下)将它传递给一个cd命令,但现在我只是想把它放到变量TgtDir中。

当我用C运行此脚本输出:\的Result.txt是:

ECHO is on. 
ECHO is on. 

任何帮助吗?

+1

'SET TgtDir = %% i'设置一个名为''TgtDir变量 - 注意额外的空间,所以'%TgtDir%'没有返回,因为什么叫那 – SeanC

回答

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变量在你的内部循环,而不是创建一个新的变量。

+0

好极了,完美的解决方案。谢谢:) –

+0

这也解决了我的问题。在我的情况下,脚本总是在第一次在新的cmd.exe中执行时失败。但是,在同一个cmd.exe中运行两次会有效。感谢这个提示。 :) – Qben

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

没有格式化,这是非常非常难以理解的。 – Andrew

相关问题