我创建了一个运行某些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
答案 0 :(得分:2)
FOR变量扩展具有修饰符,将值视为文件规范并将其分解为组件
这些修饰符还将值规范化为规范(标准)形式。
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"
的长度)。
这需要enabledelayedexpansion
(see 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