2012-03-22 20 views
1

我創建了一個運行某些SQL並將輸出寫入文件的批處理文件。刪除文件中的尾部空格以便使用批處理腳本進行比較

現在我試圖比較這個結果數據來移動一些文件,但SQL輸出文件似乎有尾隨空格導致錯誤的比較。

如何刪除這些尾部空格?

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

TEST01看起來像

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

我看到尾隨空格,並將其與準備總是導致不

+1

添加一些代碼,你目前在你的批處理文件。 – Tomalak 2012-03-22 16:48:16

+0

FOR/F「delims =」%% R IN(C:\ Test01.txt)DO IF Ready == %% R COPY/y C:\ Test01.txt「 – 2012-03-22 16:58:27

+0

什麼是'Ready'?另外,請從'C添加幾行:\ Test01.txt' – Tomalak 2012-03-22 17:06:46

回答

1

您可以使用批處理字符串處理削減前五個字母(即,字符串"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" 
) 

查看更多的字符串操作技巧 - 其中包括如何修剪空白 - 在這裏:http://www.dostips.com/DtTipsStringManipulation.php

+0

感謝它的運作 – 2012-03-22 18:26:49

2

FOR變量擴張有治療修飾符作爲文件規格的值並將其分解成組件

  • %%〜dR =驅動器:
  • %%〜PR = \路徑\
  • %%〜NR = baseName的
  • %%〜xR的=。擴展名

這些改性劑也標準化值成規範(標準)的形式。

Windows不允許文件或文件夾名稱以空格或點結束,因此修改器將修剪值中的尾部點和空格。你可以使用這個事實來修剪尾隨的空格!

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

如果值不包含:\/這隻會正常工作。另外請記住,它也會修剪尾隨點。所以如果你使用%%~nxR,像c:\my path\Ready.這樣的字符串也會變成Ready

有一個更簡單,更可靠的解決方案,可以在你的情況下工作。所有的行都由一個單詞組成(加上尾隨空格)。如果你可以依賴這個事實,那麼你可以簡單地刪除你的DELIMS選項,並讓你爲你修剪空間(默認的DELIMS是空格和製表符)。

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

如果你擔心一些字可以遵循READY,在這種情況下,你不想複製,那麼你可以使用

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

+1非常好! – Tomalak 2012-03-22 18:48:00

相關問題