2012-12-05 81 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