4

WindowsのバッチFORコマンドを使用しようとしています。

区切り文字としてTAB文字を指定するにはどうすればよいですか?デフォルトはスペースとタブですが、タブのみが必要です。

私はこれを試しましたが、機能しません:

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

タブではなくT文字で分割されているようです。コマンドプロンプトにリテラルを貼り付けてみましたが、構文エラーが発生します。

4

4 に答える 4

9

引用符で囲まれたオプション文字列には、リテラルのタブ文字が必要です。リテラルTABは、バッチファイルとコマンドラインの両方で機能します。

コマンドラインにTABを入力しようとしている場合は、ファイル名の補完が作業の妨げになっている可能性があります。を使用して、名前の補完を無効にできますCMD /F:OFF。これで、リテラルのTAB文字を入力できるようになります。

使用するテキストエディタによっては、バッチスクリプトにTABを入力しようとすると問題が発生する可能性もあります。一部のプログラマーのエディターには、TABをスペースに自動的に変換する設定があります。エディターがそれを行っていないことを確認する必要があります。

"tokens=3 delims=^T"したがって、文字列を変更して、代わりにTABリテラルを使用する必要があります。^T

于 2012-12-06T02:33:43.033 に答える
5

Ngaaa..午後の頭痛について話します...

今日も同じ問題が発生しました...FOR/ Fを使用して行を解析する必要がありました。各行は、タブで区切られた各文の数の文(それぞれにスペースが埋め込まれている可能性があります)でした。

私の問題は、私の会社のコーディング標準(BATCHファイルの場合でも)が実際のTAB文字をソースコードに含めることを禁止していることです(エディターはTABを入れることを禁止しており、バージョンctrlツールはTABまたは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の一時的な内容は1行で、次のようになります。

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

FORコマンドは、IDENTIFIERとREG_SZの2つの「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文字を含めることができなくなります。

-デイブ

于 2014-01-28T20:40:42.767 に答える
3

リテラルのタブ文字は機能しているように見えますが、cmdプロセスを。で開始する必要があります/F:ON。それがないと、タブ文字を貼り付けても機能しません。

于 2012-12-06T00:11:38.113 に答える
0

このWebサイトhttp://ss64.com/nt/for_f.htmlによると、デフォルトの区切り文字はタブなので、delimsパラメーターなしで試してください。

于 2012-12-06T00:03:37.173 に答える