2014-01-10 120 views
0

快樂星期五智囊團! 我需要一些有關批處理.BAT腳本的幫助。具體而言,我需要一些「IF語句語法」的幫助需要批量腳本幫助

我有一個重命名文件的腳本。有兩個文件,一個以四位數字結尾,另一個以五位數字結尾。這些文件將被我的腳本中已經預先設置的變量重新命名。

所以這裏是一個場景:我們在位於

下的目錄中的兩個文件:\ Users \用戶名\桌面\測試目錄

有測試目錄中的兩個文件:

file1.12345

file2.1234

四位數結尾是一個變量類型(VAR1),而以五位數字結尾的文件是另一個變量類型(VAR2)。

我需要一個if語句:

一)閱讀所有與所選擇的目錄中的文件(S)(不使用通配符如果可能的話)。 b)根據「。」之後的位數確定。使用哪個變量。 c)一旦做出該決定,用適當的變量重命名該文件。

最終重新命名慣例如此:yyyymmddtype.1234/12345

所以基本上會用我已經創建了郵戳變量,我已經創建的類型變量由if語句進行注入,附加文件的原始結尾數字。

我知道這看起來很多,但我更像一個bash劇本傢伙。我擁有所有的元素,我只需要if語句和感覺就像一個循環的某種類型來將它們連接在一起。

任何幫助將是偉大的!

謝謝!

回答

0

對不起,不是你要求的選項。相反,遍歷完整列表檢查擴展一致性每個文件的,迭代的模式,將過濾文件列表中,重命名與asociated「類型」

for %%v將迭代變量列表匹配的文件,for %%a將分裂在圖案和類型中的變量的內容,for %%f將生成文件列表,使用檢索到的圖案與findstr過濾和重命名匹配的文件與相應的「類型」

重命名爲輸出命令到控制檯命令之前包含一個echo。如果輸出正確,請刪除echo以重命名文件。

@echo off 

    rem Variables defined elsewhere 
    set "folder=c:\somewhere" 
    set "timestamp=yyyymmdd" 

    rem Rename pattern variables in the form pattern;type 
    set "var1=\.....$;type1" 
    set "var2=\......$;type2" 

    set "var1=\.[^.][^.][^.][^.]$;type1" 
    set "var2=\.[^.][^.][^.][^.][^.]$;type2" 


    setlocal enableextensions disabledelayedexpansion 

    for %%v in ("%var1%" "%var2%") do for /f "tokens=1,* delims=;" %%a in ("%%~v") do (
     for /f "tokens=*" %%f in ('dir /a-d /b "%folder%" ^| findstr /r /c:"%%~a"') do (
      echo ren "%folder%\%%~f" "%timestamp%%%~b%%~xf" 
     ) 
    ) 

    endlocal 
+0

哥們!如果你在附近,我會給你買一瓶啤酒! – NerdyBird

0
@ECHO OFF &SETLOCAL 
set "yyyymmdd=yyyymmdd" 
set "VAR1=VAR1" 
set "VAR2=VAR2" 
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\....."') do echo(ren "%%~a" "%yyyymmdd%%VAR1%%%~xa" 
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\......"') do echo(ren "%%~a" "%yyyymmdd%%VAR2%%%~xa" 

刪除echo(得到它的工作。

0

如果我理解你,那麼這將使用預設變量爲每一個重命名這兩個文件:

for %%a in ("%userprofile%\Desktop\test-dir\*") do (
    if "%%~xa"==".12345" ren "%%a" "%variableA%-%variableB%%%~xa" 
    ) else (
    ren "%%a" "%variableC%-%variableD%%%~xa" 
    ) 
)