2015-10-14 2 views
1

Я попытался переименовать все имена файлов, используя пакетный скрипт. Но имена файлов частично изменены с предыдущим именем файла, когда я использую приведенный ниже скрипт.Почему имя файла переименовано частично?

Batch:

@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 

Примечание: удалить echo команду перед rename если это Окей


@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 

Примечание: В последнем сценарии, мы можем сдвиньте сценарий дальше и проверьте, присутствует ли файл Undo, а затем выполните автоматическое восстановление.

+0

'xxxxxxxx_1.xhtml' не переименовали после запуска' undo-renaming-xxxxxxx-xxxxxx.bat' – Darious

+0

, кстати, вы можете удалить комментарии obselete pls – Paul

+0

Спасибо и извините, но я могу дать upvote после 15 репутации. действительно ценю за это. – Darious

1

Вероятно, это связано с тем, что имя получателя в вашей команде ren содержит подстановочный знак (из `% ext%).

Я предлагаю ввести пользователя только расширение (т. Е. xhtml, а не *.xhtml), а затем добавить нужный шаблон в команду FOR.

В качестве альтернативы вы можете использовать %%~xF вместо %ext% в команде ren, которая должна достичь такого же эффекта.

+0

Спасибо @Iridium. он работает круто. Когда я запускаю скрипт в первый раз, он менял хорошие '_1, _2 ...._ n', но имена файлов меняются' _2 ..._ n' во втором хите. Я думаю, у него есть '% rename% _! i!' increment. почему это произошло? – Darious

Смежные вопросы