2

我正在编写一个 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。10-13-13

11.CN=QXX004F.OU=Linc.OU=thisco.O=UCOM.T=UCOM。10-14-13

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

作为“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%。)

4

1 回答 1

4

删除 acct 变量名称后的空格并使用 ! 分数。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f "tokens=3 delims==." %%A in (inputfile.txt) do (
    set "acct=%%A"
    echo. %%A,!acct!
)
endlocal
于 2013-10-23T18:10:35.033 回答