CMD文件 - 延迟变量扩展

时间:2013-10-23 18:02:10

标签: batch-file windows-7 cmd

我正在编写一个CMD /批处理文件(在Win-7 cmd.exe下运行),我似乎对延迟变量扩展感到困惑。

我正在使用以下格式的文本文件输入:

  

9 .CN = ISRJX.OU = Linc.OU = thisco.O = UCOM.T = UCOM。 13年8月20日

     

10 .CN = FXXLISHER.OU = Linc.OU = thisco.O = UCOM.T = UCOM。 13年10月13日

     

11 .CN = QXX004F.OU = Linc.OU = thisco.O = UCOM.T = UCOM。 13年10月14日

     

12 * .CN = QXX1001OB.OU = Linc.OU = thisco.O = UCOM.T = UCOM。 13年10月15日

作为“inputfile.txt”中的内容。目的是在此过程中提取“.CN =”之后的第一个单词。

请注意,我不能根据“CN =”之前的字符数剥离,因为字符数会有所不同。

我的脚本是:

setlocal enableextensions enableDelayedExpansion
REM @echo off
for /f "tokens=3 delims==." %%a in (inputfile.txt) do (
set "acct =%%a"
echo. %%a,%acct%
)
endlocal

我已尝试过每一组报价,!,%等,并且都启用了&禁用延迟扩展,仍然无法让这个工作。在大多数情况下,当我使用!我最终回应了实际的!即"echo !acct!"将回显实际文本“!acct!”。

我在这里和其他地方已经阅读了许多关于延迟变量扩展的例子和答案。我只是无法弄清楚如何在这个例子中解决它,我希望“acct”在循环中扩展。

怀疑这是一个简单的标点符号问题,但我没有想法。当我运行它时,我看到acct设置为%% a的值,但是当它回显时,显然它不会扩展到新值 - 而是它将回显之前设置的任何内容,或者空白。

我也尝试了disabledelayedexpansion,这对我的搜索结果没有影响(包括我使用!acct!代替%acct%时。)

1 个答案:

答案 0 :(得分:4)

删除acct变量名后面的空格并使用!标记。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f "tokens=3 delims==." %%A in (inputfile.txt) do (
    set "acct=%%A"
    echo. %%A,!acct!
)
endlocal