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を入力しようとすると問題が発生する可能性もあります。一部のプログラマーのエディターには、TABをスペースに自動的に変換する設定があります。エディターがそれを行っていないことを確認する必要があります。
"tokens=3 delims=^T"
したがって、文字列を変更して、代わりにTABリテラルを使用する必要があります。^T
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文字を含めることができなくなります。
-デイブ
リテラルのタブ文字は機能しているように見えますが、cmd
プロセスを。で開始する必要があります/F:ON
。それがないと、タブ文字を貼り付けても機能しません。
このWebサイトhttp://ss64.com/nt/for_f.htmlによると、デフォルトの区切り文字はタブなので、delimsパラメーターなしで試してください。