2014-02-19 103 views
1

我想比較名字一堆文件像批調用另一個批處理,並使用輸出變量

「BD12-CD9.txt」

來命名的文件夾

「BD12-CD9 - somefoldername」

我取出.TXT extensi打開以獲取ID代碼「BD12-CD9」並且想要檢查文件夾名稱是否包含代碼。

我不知道如何做到這一點,沒有一個比較字符串的if語句。 (可能是一個簡單的解決方案,如jQuery的indexOf())

所以我需要從文件名中去掉ID代碼並做一個直接比較。

問題是ID和名稱並不總是完全相同的長度,例如「BD12-CD10.txt」,所以我不能只做「set folderName2 =!folderName:〜0,8!」

我找到了一個strlength函數,並把它放在另一個名爲strlen.bat的批處理文件中,它工作的很好,迴應了我剝離的ID代碼的長度。我如何使用回顯值?

move.bat

@echo off 
@setlocal enabledelayedexpansion 
set "errfolderpath=C:\Testing\Moving txt files automatically\" 
echo. 
for %%x in (*.*) do (
    set fileName=%%x 
    set fileName2=!fileName! 
    set fileName2=!fileName2:~0,-4! 
    call strlen !fileName2! 
    FOR /D %%K in ("%errfolderpath%*") DO (
     SET folderName=%%~nK 
     set folderName2=!folderName! 
     set folderName2=!folderName:~0,11! 
     echo folder: !folderName2!, file: !fileName2! 
     if !folderName2! == !fileName2! echo MOVE '!fileName!' to '!folderName!' 
    ) 
    echo %_len%  
    echo. 
) 
PAUSE 

strlen.bat

@echo off 
:: strlen.bat 
:: http://acm.zhihua-lai.com 
if [%1] EQU [] goto end 
:loop 
    if [%1] EQU [] goto end 
    set _len=0 
    set _str=%1 
    set _subs=%_str% 
    :getlen  
     if not defined _subs goto result 
     :: remove first letter until empty 
     set _subs=%_subs:~1% 
     set /a _len+=1 
     goto getlen 
    :result 
     echo %_len%   
     shift 
     goto loop 
:end 

回答

1

批處理文件變量的使用,如果你看看代碼,一個名爲_len變量定義。然後這個變量被回顯到控制檯,但不會被刪除(不重新分配,沒有endlocal,...),所以只需使用它。

無論如何,它比看起來更容易。

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "errfolderpath=C:\Testing\Moving txt files automatically" 
    for %%a in (*.txt) do (
     set "notMoved=1" 
     for %%b in ("%errorfolderpath%\%%~na*") do if defined notMoved (
      set "notMoved=" 
      move "%%~fa" "%%~fb" 
     ) 
    ) 

對於每個文件,搜索具有相同前綴的文件夾(在%%a引用的文件的名稱,沒有擴展,是%%~na)。如果找到,請將文件(文件的完整路徑爲%%~fa)移動到目標文件夾,並使用開關變量將文件「標記」爲已移動,以避免在具有相同前綴的兩個文件夾時出現問題在內部檢索for %%b)。

+0

謝謝MC ND,我快到了。你知道我會如何改變這個: 'set folderName2 =!folderName:〜0,11!' to use!_len!而不是11? – user1425011

+1

@ user1425011'for %% z in(!_len!)do set folderName2 =!folderName:〜0,%% z!' –

相關問題