Как создать пакетный файл для переименования большого количества файлов в папке? - PullRequest
18 голосов
/ 28 сентября 2010

Я бы хотел переименовать большое количество файлов в папке в системе WinXP, предпочтительно используя пакетный файл.

В настоящее время файлы называются так:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

И я хочу изменить их на:

Декабрь 001.jpg
декабрь 002.jpg
декабрь 003.jpg

Как мне выполнить эту операцию ??

Ответы [ 5 ]

26 голосов
/ 28 сентября 2010
@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 на декабрь в именах файлов.

11 голосов
/ 28 сентября 2010
dir /b *.jpg >file.bat

Это даст вам такие строки, как:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Отредактируйте файл file.bat в своем любимом Windows текстовом редакторе , выполнив эквивалент:

s/Vacation2010(.+)/rename "&" "December \1"/

Это регулярное выражение ;Многие редакторы поддерживают их, но ни один из них не поставляется по умолчанию с Windows (насколько я знаю).Вы также можете получить инструмент командной строки, такой как sed или perl, который может использовать тот же синтаксис, который у меня есть выше, после экранирования для командной строки.

Результирующие строки будут выглядеть следующим образом:

переименовать "Vacation2010 001.jpg" "Декабрь 001.jpg"
переименовать "Vacation2010 002.jpg" "Декабрь 002.jpg"
переименовать "Vacation2010 003.jpg" "Декабрь 003.jpg"

Вы можете распознать эти строки как команды переименования, по одной на файл из исходного списка.;) Запустите этот пакетный файл в cmd.exe.

6 голосов
/ 28 сентября 2010

Вы можете сделать это легко без ручного редактирования или использования модных текстовых редакторов.Вот 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 
1 голос
/ 03 февраля 2013
@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 в той же папке с фотографиями. Если вы хотите сохранить скрипт в другом каталоге [E.G. у вас есть любимая папка для утилит] вы должны изменить значение _dir с путем к фотографиям.

Если вам нужно выполнить ту же работу для других фотографий [или других файлов _ext], вам нужно изменить значение _toEdit на строку, которую вы хотите изменить [или стереть], и значение _with со строкой, которую вы хотите поместить вместо _toEdit [SET "_with=", если вы просто хотите стереть строку, указанную в _toEdit].

0 голосов
/ 22 апреля 2016

Вам не нужен командный файл, просто сделайте это из powershell:

powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}"
...