删除文件中的尾随空格以使用批处理脚本进行比较

时间:2012-03-22 16:45:22

标签: batch-file

我创建了一个运行某些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              

我看到尾随空格并将其与Ready进行比较总是会产生No

2 个答案:

答案 0 :(得分:2)

FOR变量扩展具有修饰符,将值视为文件规范并将其分解为组件

  • %% ~dR = drive:
  • %% ~pR = \ path \
  • %% ~nR = baseName
  • %% ~xR = .extension

这些修饰符还将值规范化为规范(标准)形式。

Windows不允许文件或文件夹名称以空格或点结尾,因此修饰符将修剪值的尾随点和空格。您可以使用此事实修剪尾随空格!

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

只有在值不包含: \/时,此功能才能正常运行。还记得它也会修剪尾随点。因此,如果您使用c:\my path\Ready.,则Ready这样的字符串也会变为%%~nxR

有一个更简单,更可靠的解决方案可能适用于您的情况。所有行都包含一个单词(加上尾随空格)。如果您可以依赖这个事实,那么您可以简单地删除DELIMS选项并让FOR为您修剪空格(默认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

答案 1 :(得分: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