Как создать пакетный файл для переименования большого количества файлов в папке?
Я хотел бы переименовать большое количество файлов в папке в системе WinXP, желательно с использованием командного файла.
Файлы в настоящее время названы так:
Отпуск2010 001.jpg
Отпуск2010 002.jpg
Отпуск2010 003.jpg
И я хотел бы изменить их на:
Декабрь 001.jpg
Декабрь 002.jpg
Декабрь 003.jpg
Как я могу выполнить эту операцию?
5 ответов
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=Vacation2010
SET new=December
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
SET newname=%%f
SET newname=!newname:%old%=%new%!
move "%%f" "!newname!"
)
Что он делает, так это перебирает все файлы.jpg в папке, где находится пакетный файл, и заменяет Vacation2010 на декабрь в именах файлов.
dir /b *.jpg >file.bat
Это даст вам такие строки, как:
Отпуск2010 001.jpg
Отпуск2010 002.jpg
Отпуск2010 003.jpg
Отредактируйте файл file.bat в вашем любимом текстовом редакторе Windows, выполнив эквивалент:
s/Vacation2010(.+)/rename "&" "December \1"/
Это регулярное выражение; многие редакторы поддерживают их, но ни один из них не поставляется по умолчанию с Windows (насколько я знаю). Вы также можете получить инструмент командной строки, такой как sed или perl, который может использовать тот синтаксис, который у меня есть выше, после экранирования для командной строки.
Результирующие строки будут выглядеть так:
переименовать "Отпуск2010 001.jpg" "Декабрь 001.jpg"
переименовать "Vacation2010 002.jpg" "Декабрь 002.jpg"
переименовать "Vacation2010 003.jpg" "Декабрь 003.jpg"
Вы можете распознать эти строки как команды переименования, по одной на файл из исходного списка.;) Запустите этот пакетный файл в cmd.exe.
Вы можете сделать это легко без ручного редактирования или использования модных текстовых редакторов. Вот VBScript.
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder="c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
If objFS.GetExtensionName(strFile) = "jpg" Then
strFileName = strFile.Name
If InStr(strFileName,"Vacation2010") > 0 Then
strNewFileName = Replace(strFileName,"Vacation2010","December")
strFile.Name = strNewFileName
End If
End If
Next
сохранить как myscript.vbs и
C:\test> cscript //nologo myscript.vbs
Вам не нужен командный файл, просто сделайте это из powershell:
powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}"
@ECHO off & SETLOCAL EnableDelayedExpansion
SET "_dir=" REM Must finish with '\'
SET "_ext=jpg"
SET "_toEdit=Vacation2010"
SET "_with=December"
FOR %%f IN ("%_dir%*.%_ext%") DO (
CALL :modifyString "%_toEdit%" "%_with%" "%%~Nf" fileName
RENAME "%%f" "!fileName!%%~Xf"
)
GOTO end
:modifyString what with in toReturn
SET "__in=%~3"
SET "__in=!__in:%~1=%~2!"
IF NOT "%~4" == "" (
SET %~4=%__in%
) ELSE (
ECHO %__in%
)
EXIT /B
:end
Этот скрипт позволяет изменить имя всех файлов, которые содержат Vacation2010
с тем же именем, но с December
вместо Vacation2010
,
Если вы копируете и вставляете код, вы должны сохранить .bat
в той же папке с фотографиями. Если вы хотите сохранить скрипт в другом каталоге [например, у вас есть любимая папка для утилит], вы должны изменить значение _dir
с пути фотографий.
Если вам нужно проделать ту же работу для других фотографий [или других файлов для изменения _ext
] вы должны изменить значение _toEdit
со строкой, которую вы хотите изменить [или стереть] и значением _with
со строкой, которую вы хотите поставить вместо _toEdit
[SET "_with="
если вы просто хотите стереть строку, указанную в _toEdit
].