web-dev-qa-db-ja.com

フォルダー内の多数のファイルの名前を変更するバッチファイルを作成するにはどうすればよいですか?

できればバッチファイルを使用して、WinXPシステム上のフォルダー内の多数のファイルの名前を変更したいと思います。

ファイルには現在、次のように名前が付けられています。

Vacation2010 001.jpg
休暇2010 002.jpg
休暇2010 003.jpg

そして、それらを次のように変更したいと思います。

12月001.jpg
12月002.jpg
12月003.jpg

この操作を実行するにはどうすればよいですか?

18
user459962
@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をファイル名内の12月に置き換えます。

26
RoXX
dir /b *.jpg >file.bat

これにより、次のような行が表示されます。

Vacation2010 001.jpg
休暇2010 002.jpg
休暇2010 003.jpg

お気に入りのWindowstext-editor でfile.batを編集し、次と同等の操作を行います。

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

それは 正規表現 ;多くのエディターがそれらをサポートしていますが、Windowsにデフォルトで付属しているエディターはありません(私の知る限り)。また、コマンドラインをエスケープした後、上記のとおりの構文を取ることができるsedやPerlなどのコマンドラインツールを入手することもできます。

結果の行は次のようになります。

「Vacation2010 001.jpg」「December 001.jpg」の名前を変更します
rename "Vacation2010 002.jpg" "December 002.jpg"
rename "Vacation2010 003.jpg" "December 003.jpg"

これらの行は、元のリストのファイルごとに1つの名前変更コマンドとして認識される場合があります。 ;)cmd.exeでそのバッチファイルを実行します。

11
Roger Pate

手動で編集したり、派手なテキストエディターを使用したりすることなく、これを簡単に行うことができます。これが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 
6
ghostdog74
@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]。

1
ingroxd

バッチファイルは必要ありません。powershellからこれを行うだけです。

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