2012-03-22 16 views
1

SQLを実行し、出力をファイルに書き込むバッチファイルを作成しました。バッチスクリプトを使用した比較のために、ファイル内の末尾のスペースを削除します

私はこの結果データをいくつかのファイルを移動するために比較しようとしていますが、SQL出力ファイルの後ろに空白があり、誤った比較が行われているようです。

これらの末尾のスペースを削除するにはどうすればよいですか?

FOR /F "delims=" %%R IN (C:\Test01.txt) DO IF Ready == %%R COPY /y C:\Test01.txt " 

TEST01は常にあなたが最初の5つの文字(つまりをカットするバッチ文字列処理を使用することができません

+1

を使用することができ、コピーしたくない場合には、READY従うことができることを心配している場合。 – Tomalak

+0

FOR/F "delims =" %% R IN(C:\ Test01.txt)DO IFレディ== %% R COPY/y C:\ Test01.txt " –

+0

「レディ」とは何ですか?また、C 'から数行を追加してください:\ Test01.txt' – Tomalak

答えて

1

になり

Returncode 
----------- 
No 
Yes 
Complete 
Incomplete 
Ready    

ように私は、末尾のスペースを見ていますし、準備完了と比較することになります、文字列の長さは"Ready")を指定します。

これはenabledelayedexpansionsee docs)を必要とし、それがこのように動作します:

setlocal enabledelayedexpansion 

for /f "delims=" %%R IN (Test01.txt) do (
    set str=%%R 
    if "!str:~0,5!" == "Ready" copy /y Test01.txt "somewhere" 
) 

は、より多くの文字列操作のヒントを参照してください - 空白をトリムする方法を含む - ここでは変数展開FOR http://www.dostips.com/DtTipsStringManipulation.php

+0

ありがとう作品 –

2

は治療修飾子を持っていますその値をファイルの仕様として分解してコンポーネントに分解します。

  • %〜dR = drive:
  • %%〜PR = \パス\
  • %%〜NRの=たbaseName
  • %%〜xRを=。拡張子

これらの改質剤はまた、正規(標準)形式に値を正規化します。

Windowsでは、ファイル名またはフォルダ名の末尾にスペースまたはドットを使用できないため、修飾子は末尾のドットおよびスペースを値から削除します。この事実を利用して、末尾のスペースをトリムすることができます!

FOR /F "delims=" %%R IN (C:\Test01.txt) DO IF Ready == %%~nxR COPY /y C:\Test01.txt 

値が:\または/が含まれていない場合にのみ正常に動作します。また、後続のドットもトリミングされることに注意してください。したがってc:\my path\Ready.のような文字列は、%%~nxRを使用するとReadyになります。

さらに簡単で信頼性の高い解決方法があります。すべての行は、単一の単語(末尾のスペースを含む)で構成されています。あなたがその事実に頼ることができれば、単にあなたのDELIMSオプションを削除して、あなたにスペースをトリムさせることができます(デフォルトのDELIMSはスペースとタブです)。

FOR /F %%R in (C:\Test01.txt) DO IF Ready == %%R COPY /y C:\Test01.txt 

あなたには、いくつかの言葉が、あなたはあなたが現在あなたのバッチファイルを持っているいくつかのコードを追加します。

FOR /F %%R* in (C:\Test01.txt) DO IF Ready == %%R IF "%%S" == "" COPY /y C:\Test01.txt 
+0

+1それはとてもいいです! – Tomalak

関連する問題