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