Windows批处理FOR命令选项卡分隔符

jte*_*ace 4 windows batch-file command-prompt

我正在尝试使用Windows批处理FOR命令.

如何将TAB字符指定为分隔符?默认为空格和制表符,但我只想要制表符.

我试过这个,但它不起作用:

FOR /F "tokens=3 delims=^T" %i in (test.txt) do @echo %i
Run Code Online (Sandbox Code Playgroud)

它似乎是在T字符而不是标签上分裂.我还尝试了一个粘贴到命令提示符的文字,但是我收到了语法错误.

dbe*_*ham 7

您需要在带引号的选项字符串中使用文字制表符.文字TAB既可以在批处理文件中运行,也可以在命令行上运行.

如果您尝试在命令行中键入TAB,则文件名完成可能会阻碍您的工作.您可以使用禁用名称完成CMD /F:OFF.然后,您就可以输入文字TAB字符.

根据您使用的文本编辑器,尝试将TAB输入批处理脚本时也会遇到问题.一些程序员的编辑器具有自动将TAB转换为空格的设置.您需要确保您的编辑器没有这样做.

因此,您只需要更改"tokens=3 delims=^T"字符串即可使用TAB文字而不是^T


小智 5

Ngaaa ..谈论下午的头痛...

今天我遇到了同样的问题...我需要用FOR / F解析行,其中每行是许多句子(每个句子都带有空格),每个句子都由TAB分隔。

我的问题是我的公司编码标准(甚至是BATCH文件的编码标准)也禁止在源代码中包含实际的TAB字符(我们的编辑人员禁止在其中插入TAB,而我们的Version ctrl工具则禁止对任何带有TAB或WTR的文本文件进行检入[白色-在右边]。)

所以,这是一个hack,但是它可以在XP上运行(挂...深深的耻辱...)

SET REG_CPU="HKLM\Hardware\Description\System\CentralProcessor\0"
REG.EXE QUERY %REG_CPU% /V IDENTIFIER | FIND "REG_SZ" > RegCPUid.Tmp
for /F "tokens=2 delims=rR" %%i in (RegCPUid.Tmp) do SET TAB=%%~i
Run Code Online (Sandbox Code Playgroud)

这在XP上有效,但是我没有检查Win7或Win7 [WoW64]。

RegCPUid.Tmp的临时内容为一行,看起来像

"    IDENTIFIER<tab>REG_SZ<tab>x86 Family 6 Model 37 Stepping 2"    
Run Code Online (Sandbox Code Playgroud)

FOR命令只是拔出孤独的TAB IDENTIFIER和REG_SZ的两个“ R”之间,并为其设置环境变量TAB。

然后,我的脚本可以仅使用制表符作为定界符(而不是空格)来执行所需的所有FOR / F循环...

for /F "tokens=1-3* delims=%TAB%" %%i in (Sentences.txt) do ECHO The THIRD sentence is %%k
Run Code Online (Sandbox Code Playgroud)

所有这些使我在BATCH文件中没有任何硬编码的TAB字符。

-戴夫