2012-12-05 42 views
4

我试图使用Windows批处理FOR commandWindows批处理命令选项卡分隔符

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

我已经试过这一点,但它不工作:

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

这似乎是在T字而不是制表分裂。我也尝试将一个文字粘贴到命令提示符中,但我得到一个语法错误。

回答

8

您需要带引号的选项字符串中的文字选项卡字符。字面TAB既可以在批处理文件中执行,也可以在命令行中执行。

如果您试图在命令行中键入TAB,则文件名完成可能会阻碍您的工作。您可以使用CMD /F:OFF禁用名称完成。然后你将能够输入一个字面的TAB字符。

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

所以,你只需要改变你的"tokens=3 delims=^T"字符串使用文字而不是^T

0

根据这个网站http://ss64.com/nt/for_f.html,默认分隔符是一个选项卡,所以尝试它没有delims参数。

+2

你在哪里看到的?它说默认是 jterrace

+1

jterrace是正确的,默认是''。只需从命令行键入HELP FOR'并阅读DELIMS选项的描述。 – dbenham

1

它似乎是一个文字标签字符确实工作,但您必须启动cmd进程/F:ON。没有这一点,即使粘贴在制表符中也不起作用。

+1

文字选项卡在批处理文件中正常工作。如果您想在命令行中输入TAB文字,您实际上需要CMD/F:OFF。 – dbenham

4

Ngaaa一个TAB ..谈了一个下午头痛...

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

我的问题是我公司的编码标准(甚至批处理文件)禁止 实际TAB字符从源代码是(我们的编辑禁止将制表符 中,我们的版本CTRL工具禁止任何文本文件中的任意签入关于制表符 或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的临时内容是一条线,它看起来像

" IDENTIFIER<tab>REG_SZ<tab>x86 Family 6 Model 37 Stepping 2"  

for命令简单地拔除了寂寞TAB 标识符的两个“R” S和REG_SZ和套之间环境变量TAB。

然后我的脚本就可以完成所有的FOR/F循环就是了,只有标签 字符作为分隔符(而不是空格)......

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

所有这一切都让我不要BATCH文件中有任何硬编码的制表符字符。

-dave