2016-08-25 125 views
1

如果文件名少於18位,我有一個腳本在文件名中預置了零。使用批處理腳本重命名文件

例如,如果文件名是1234567,那麼就應該把它重命名爲0000000000如果是123456789,那麼它使00000000。我的代碼已經在做這個功能現在

我的要求是,如果文件名是1234567-1,那麼就應該讓0000000000_Type_1,如果名稱是1234567-a,那麼就應該把它重命名爲0000000000_Type_a

這意味着它應該繼續做我的腳本做的事情,但另外它應該在文件名中加上_Type_<last character>。文件名可以是12345671234567891234567-112345678-b或其他任何東西,但連字符( - )前總是有數字而不是字符。文件夾中可以有多個文件。連字符( - )應該用下劃線(_)替換,後面跟Type_,以及文件名中最後一個字符。

這裏是我現有的代碼:

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\Task\Drop_Files\*.tif) do (
    rem store file name without extension 
    set FileName=%%~nf 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18! 

    set FileName=!FileName!%%~xf 

    rem Rename the file 
    rename "%%f" "!FileName!" 

) 

回答

1

下面的腳本應該處理好與連字符後綴的文件(如1234567-1)和不(像1234567),只要你想:

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Iterate over TIF files: 
for %%f in ("%~dp0*.tif") do (
    rem Store file name without extension: 
    set "FileName=%%~nf" 

    rem Split off hyphen and suffix: 
    set "Suffix=!FileName:*-=!" 
    if "!Suffix!"=="!FileName!" set "Suffix=" 
    call set "FileName=%%FileName:-!Suffix!=%%" 
    if defined Suffix set "Suffix=_Type_!Suffix!" 

    rem Add leading zeroes: 
    set "FileName=00000000000000000!FileName!" 

    rem Build final file name: 
    set "FileName=!FileName:~-18!!Suffix!" 

    rem Rename the file: 
    rename "%%~ff" "!FileName!%%~xf" 
) 

我做了什麼:

  • 推出新變量Suffix將在連字符後面保存字符(例如1,文件名爲1234567-1時);包含連字符的後綴(如-1)將從文件名中刪除(如果-1在文件名中出現多次,這將失敗);
  • 改進set語法通過在賦值表達式周圍添加引號;
+0

如果原始文件名爲0000000000012783_1,則您的代碼生成的文件名爲0000000000012783_1_Type_0000000012783_1。它應該是0000000000012783_Type_1。你能告訴我該怎麼辦? – shuru

+0

對不起,我沒有申請延期擴展'後綴'一次 - 見我的[編輯](http://stackoverflow.com/revisions/39150386/2)... – aschipfl

+0

...它的工作....謝謝 – shuru

0

我認爲下面,稍微修改代碼,應該做你要找的內容。基本上,您需要測試倒數第二個字符是否是破折號( - ),在這種情況下,您將其替換爲_Type_。 爲此,您提取FileName的最後2個字符(不帶擴展名),然後查看這兩個提取字符的第一個字符。如果它是破折號,那麼您會從原始文件名中消除最後兩個字符,因爲它們最終將被替換爲新的_Type_ [char]結構。

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\tests\output*.txt) do (
    rem store file name without extension 
    set FileName=%%~nf 
    set IsDash=!FileName:~-2! 
    set IsDash=!IsDash:~0,1! 
    IF "!IsDash!" == "-" (
     SET FileType=_Type_!FileName:~-1! 
     SET FileName=!FileName:~0,-2! 
    ) ELSE (
     SET FileType= 
    ) 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18!!FileType! 

    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 
0
@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Change current directory 
cd /D C:\Task\Drop_Files 

rem Iterate over tif files: 
for /F "tokens=1-3 delims=-." %%f in ('dir /B *.tif') do (

    rem Store file name without extension and leading zeroes: 
    set "FileName=00000000000000000%%f" 

    rem Get the right type and input name: 
    rem - If input name is "1234567.tif" then "%%h" is empty, so there is no Type part 
    rem - If input name is "1234567-1.tif" then "%%h" is "tif", so the Type is "_Type_%%g" 
    if "%%h" equ "" (
     set "input=%%f.%%g" 
     set "type=" 
    ) else (
     set "input=%%f-%%g.%%h" 
     set "type=_Type_%%g" 
    ) 

    rem Rename the file 
    rename "!input!" "!FileName:~-18!!type!.tif" 

) 
1

簡單。在您的原始代碼中,在「重命名」行之前,只需添加以下行:

set FileName=!FileName:-=_Type_! 

就是這樣!

+0

這將導致一個數字部分只有16位數字後綴連字符部分的文件... – aschipfl

+0

@aschipfl感謝您的反饋,但你能給我一個示例文件名,我的解決方案wouldn'工作? –

+1

例如:'1234567-1';結果將會是'00000000_Type_1'(16個數字只在'_Type_'之前,儘管應該有18個)... – aschipfl