2015-10-14 53 views
1

我試圖重命名使用批處理腳本中的所有文件名。但是,當我使用下面的腳本時,文件名與前面的文件名有部分改變。爲什麼文件名已被部分重命名?

批次:

@ECHO OFF 
Title Renamer 
color 1a 
setlocal enabledelayedexpansion 
set HR=%time:~0,2% 
set HR=%Hr: =0% 
set HR=%HR: =% 
echo Filenames are renaming by this user %USERNAME% in %ComputerName% @ %USERDOMAIN% 
ECHO. 
ECHO. 
set /p input=Enter Your Path: 
set /p ext=Ext: 
set /p rename=Rename with: 
cd /d %input% 
set i=0 
FOR %%F IN (%ext%) DO (
    set /a i=i+1 
    ren %%F %rename%_!i!%ext% 
) 
ECHO Filenames are renaming by this user %USERNAME% in %ComputerName% @ %USERDOMAIN% on Date: %date:~7,2%-%date:~4,2%-%date:~10,4% Time: %HR%:%time:~3,2%:%time:~6,2% Source Folder: %input% Extension: %ext% Rename with: %rename% >> renamed_by-%USERNAME%-%ComputerName%_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%%time:~6,2%.log 

輸出:

Enter Your Path: d:\pathtochange\ 
Ext: *.xhtml 
Rename with: chapter 

輸入文件名是:

chap_01_intro.xhtml 
chap_01.xhtml 
chap_02.xhtml 
chap_03.xhtml 
chap_04_intro.xhtml 
chap_04.xhtml 
chap_05.xhtml 

但船尾呃,輸出顯示

chapter_1.xhtml 
chapter_2ntro.xhtml 
chapter_3.xhtml 
chapter_4.xhtml 
chapter_5.xhtml 
chapter_6ntro.xhtml 
chapter_7.xhtml 

的執行腳本,但我想要的文件名應改爲

chapter_1.xhtml 
chapter_2.xhtml 
chapter_3.xhtml 
chapter_4.xhtml 
chapter_5.xhtml 
chapter_6.xhtml 
chapter_7.xhtml 

爲什麼它改名這樣的嗎?

如何找到的文件名由用戶提示改名?

+0

你有什麼期望發生的_intro文件? –

+0

只要找到'(。*?)。xhtml'(任何用戶擴展名),並用'$ 1.xhtml'不管它可能是用戶輸入取代。 – Darious

回答

0

下面是一個完整的示例:

set /p "input= Enter your path: " 
set /p "suffix= Enter the suffix extension you want to search and rename (i.e. .TXT) : " 

rem :: remove dot in suffix 
set suffix=%suffix:.=% 

set /p "prefix= Enter the word you want to use to rename: " 

setlocal enabledelayedexpansion 
set increment=0 
FOR /R %input% %%a in (*.%suffix%) do (
    set /a increment+=1 
    echo rename %%a %prefix%_!increment!%%~xa 
) 
endlocal 

注:除去在renameecho命令,如果它是好


@echo off 

rem :: set undo to true if you need to generate a reverse batch file. 
set "undo=true" 
set "logfile=true" 


for /F "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 

set /p "input= Enter your path: " 
set /p "suffix= Enter the suffix extension you want to search and rename (i.e. .TXT) : " 

rem :: remove dot in suffix 
set suffix=%suffix:.=% 

set /p "prefix= Enter the word you want to use to rename: " 
set "timestamp=%YYYY%%MM%%DD%-%HH%%Min%%Sec%" 

if /i "%undo%"=="true" (
    echo @echo off 
    echo rem :: user: %USERNAME% 
    echo rem :: Date: %DATE% %TIME% 
    echo rem :: Source folder: %input% 
    echo rem :: Extension: %suffix:.=% 
    echo rem :: renamed to: %prefix% 
    echo rem :: to undo file renaming: undo-renaming-%timestamp%.bat 
)>undo-renaming-%timestamp%.bat 

setlocal enabledelayedexpansion 
set increment=0 
(
    for /r %input% %%a in (*.%suffix%) do (
    set /a increment+=1 
    echo The file: "%%a" was renamed to "%prefix%_!increment!%%~xa" 
    rename "%%a" "%prefix%_!increment!%%~xa" 
    if "%undo%"=="true" (
     echo rename "%%~dpa%prefix%_!increment!%%~xa" "%%~nxa" 
    )>>undo-renaming-%timestamp%.bat 
) 
)>reverse-rename-%timestamp%.log 
if /i "%logfile%" neq "true" del reverse-rename-%timestamp%.log 

endlocal 

注:在最後的腳本,我們可以將場景推得更遠,並檢查文件撤消是否存在,然後自動恢復。

+0

'xxxxxxxx_1.xhtml'沒有改名後運行'的方式撤銷,更名-XXXXXXX-xxxxxx.bat' – Darious

+0

您可以刪除已廢棄評論請 – Paul

+0

感謝和抱歉,但我可以15聲譽後給予給予好評。真的很感激它。 – Darious

1

這很可能要由你ren命令目的地名稱中包含通配符(從`%EXT%)的事實引起的。

我建議讓用戶只輸入擴展名(即xhtml而不是*.xhtml),那麼僅在FOR命令添加必要的通配符。

或者,您可以在ren命令中使用%%~xF而不是%ext%命令,該命令應該達到相同的效果。

+0

謝謝@銥。它很酷。當我第一次執行該腳本時,它改變了良好的'_1,_2 ...._ n',但是在第二次打擊中文件名被改變爲_2 ... _n。我想,它有'%rename%_!i!'增量。爲什麼它發生? – Darious

相關問題