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