我正在尝试使用Windows批处理FOR command。
如何将TAB字符指定为分隔符?默认为空格和制表符,但我只想要制表符。
我试过这个,但它不起作用:
FOR /F "tokens=3 delims=^T" %i in (test.txt) do @echo %i
它似乎是在T字符而不是标签上分裂。我还尝试了一个粘贴到命令提示符的文字,但是我收到了语法错误。
答案 0 :(得分:7)
您需要在带引号的选项字符串中使用文字制表符。文字TAB既可以在批处理文件中运行,也可以在命令行上运行。
如果您尝试在命令行中键入TAB,则文件名完成可能会阻碍您的工作。您可以使用CMD /F:OFF
停用名称完成功能。然后,您就可以输入文字TAB字符。
根据您使用的文本编辑器,尝试将TAB输入批处理脚本时也会遇到问题。一些程序员的编辑器具有自动将TAB转换为空格的设置。您需要确保您的编辑没有这样做。
因此,您只需将"tokens=3 delims=^T"
字符串更改为使用TAB文字而不是^T
答案 1 :(得分:5)
Ngaaa ..谈论下午的头痛......
今天我遇到了同样的问题......我需要用FOR / F解析每一行的行 每个句子都有许多句子(每个句子都有嵌入的空格) 由TABs划定。
我的问题是我的公司编码标准(即使是BATCH文件)也禁止 来自源代码中的实际TAB字符(我们的编辑禁止放置TAB in,我们的Version ctrl工具禁止任何带有TAB的文本文件的CheckIn 或WTR [白到右]。)
所以,这是一个黑客,但它适用于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
这适用于XP,但我没有检查过Win7或Win7 [WoW64]。
RegCPUid.Tmp的临时内容是ONE LINE,看起来像
" IDENTIFIER<tab>REG_SZ<tab>x86 Family 6 Model 37 Stepping 2"
FOR命令只是在两个“R”之间掏出孤独的 TAB IDENTIFIER和REG_SZ并将环境变量TAB设置为它。
然后我的脚本可以只使用选项卡完成它想要的所有FOR / F循环 字符作为分隔符(而不是空格)...
for /F "tokens=1-3* delims=%TAB%" %%i in (Sentences.txt) do ECHO The THIRD sentence is %%k
所有这些都允许我在BATCH文件中没有任何硬编码的TAB字符。
-Dave
答案 2 :(得分:2)
看来文字制表符确实有效,但您必须使用cmd
启动/F:ON
流程。如果没有它,即使粘贴制表符也不起作用。
答案 3 :(得分:0)
根据此网站http://ss64.com/nt/for_f.html,默认分隔符是一个标签,因此请在没有delims参数的情况下进行尝试。