【问题标题】:String comparison in a batch script for loop用于循环的批处理脚本中的字符串比较
【发布时间】:2015-11-05 10:28:43
【问题描述】:

我在 for 循环中遇到了一个简单的批处理程序问题。

基本上,程序应该针对文件夹中的每个文件,如果文件名以“LOTTR”开头,它应该将文件复制到位置 Y:\ELCWork1-Rus。如果不是,则应将其复制到 Y:\ELCWork2-Oth。我使用了 2 个 if 而不是 if..else 用于未来的子字符串比较...

我需要将评估的子字符串与固定值进行比较。 在下面的代码中 - 逻辑总是不匹配。我尝试过使用和不使用双引号,并在 for 循环内外设置变量。

@echo off
setlocal ENABLEDELAYEDEXPANSION
set %c=LOTTR
for %%s in (*.csv) do ( 
   set tmp1=%%s 
   set vt1=!tmp1:~0,5! 
   set vt2=!tmp1:~0,55! 
   set "cmv=LOTTR"
   echo !tmp1:~0,10! 
   echo !vt1!
   echo %%c
   if /I "!vt1!"=="LOTTR" (
       echo "Matches"
       Xcopy !tmp1! "Y:\ELCWork1-Rus"
       )
   if /I NOT "!vt1!"=="LOTTR" (
       echo "No Match"
       Xcopy !tmp1! "Y:\ELCWork2-Oth"
       )

)

【问题讨论】:

  • 使用扩展集语法来避免尾随空格。set "tmp1=%%s"set "vt1=!tmp1:~0,5!" ...
  • 谢谢 Jeb - 这样就搞定了

标签: string batch-file for-loop


【解决方案1】:

您在set vt1=!tmp1:~0,5! 行之后放置了一个空格。如果文件以“LOTTR”开头,则字符串变为“LOTTR”:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%s in (*.csv) do ( 
    set tmp1=%%s 
    set vt1=!tmp1:~0,5!
    if /I "!vt1!"=="LOTTR" (
        echo "Matches"
        Xcopy !tmp1! "Y:\ELCWork1-Rus"
        )
    if /I NOT "!vt1!"=="LOTTR" (
        echo "No Match"
        Xcopy !tmp1! "Y:\ELCWork2-Oth"
        )
    )

【讨论】:

  • 优秀 - 删除了所有腰部的所有尾随空格,现在可以完美运行 - 谢谢乔恩
猜你喜欢
  • 2020-08-07
  • 2013-01-19
  • 1970-01-01
  • 2014-08-19
  • 2013-02-03
  • 2018-08-08
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
相关资源
最近更新 更多