2015-11-05 88 views
1

我在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" 
     ) 

) 
+3

使用擴展集語法避免你的尾隨spaces.'set「TMP1 = %%的」'和'設置「VT1 = TMP1! :〜0,5「! '... – jeb

+0

謝謝傑布 - 這將排序它 – DavScrim

回答

0

您已在行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" 
     ) 
    ) 
+0

優秀 - 刪除所有的尾隨空間來回所有loines,它現在完美 - 現在感謝喬恩 – DavScrim

+0

@DavScrim,如果這個答案解決了你的問題,請考慮接受它.. 。 – aschipfl