プロが教える店舗&オフィスのセキュリティ対策術

フォルダ内にある複数のJPG画像のファイル名を拡張子は残したまま末尾4文字のみ削除したいのですが、可能でしょうか?
例)1234 (1)→1234
※4と(の間には半角スペースが入っています。スペースを入れて4文字を削除したいです。
例)123 (1)→123
※3と(の間には半角スペースが入っています。スペースを入れて4文字を削除したいです。

上記の様な事が、フォルダ内にあるバッチファイルをダブルクリックするとファイル名が変更される様にしたいです。宜しくお願いします。

A 回答 (3件)

for /f "delims=*" %%i in ('dir /b ^| findstr /i /e /r " ([0123456789])\.jpg"') do (


 call :RENAME "%%i"
)
goto :EOF

:RENAME
set F=%~1
ren "%F%" "%F:~0,-8%.jpg"
goto :EOF
--
PowerShell や VBScript の方が安全だと思います。
    • good
    • 1
この回答へのお礼

有難う御座います。

お礼日時:2016/09/26 09:44

以下のようなスクリプトを作成してください。

(ファイル名をsample.vbsとします)
--------------------------------------
'当該ファイルと同じディレクトリ下のすべてのjpegファイルのファイル名の下4桁を削除したものにリネームする
' 122( 1).jpg ---> 122.jpg
' 但し、リネーム後に同一のファイルが存在する場合はリネームしない
Option Explicit
Dim strFolderName ' フォルダ名
Dim strScriptName ' スクリプト名

Dim objFSO ' FileSystemObject
Dim objStartFolder ' 開始フォルダ
Dim objREG '正規表現
Dim baseName 'ファイルのベース名(拡張子を除いた名称)
Dim extName 'ファイルの拡張子(.は含まれない)
dim newName
dim newPath
dim oldPath
set objREG = New RegExp
objREG.Pattern = "^(.*)(\(.*\))(\.jpg)$"
objREG.IgnoreCase = True
' フォルダ検索関数
Sub FindFolder(ByVal objMainFolder)
Dim objSubFolder ' サブフォルダ
Dim objFile ' ファイル
'各ファイルを表示
For Each objFile In objMainFolder.Files
if objREG.Test(objFile.Name) then
newName = objREG.Replace(objFile.Name,"$1" & "$3")
WScript.Echo "  " & objFile.Name & "-->" & newName & "  Rename対象"
oldPath = objFile.Path
newPath = objFSO.GetParentFolderName(oldPath) & "\" & newName
if objFSO.FileExists(newPath) then
WScript.Echo "既にリネーム後の同一ファイルが存在するのでスキップします"
else
objFSO.MoveFile oldPath,newPath 'リネーム
end if
End If
Next
End Sub

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strScriptName = WScript.ScriptName
strFolderName = Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName, "\"))

Set objStartFolder = objFSO.GetFolder(strFolderName)
WScript.Echo objStartFolder.Path
FindFolder objStartFolder

Set objStartFolder = Nothing
Set objFSO = Nothing
-----------------------------------------------
sample.vbsを画像ファイルと同じフォルダに置いてください。
sample.vbsをダブルクリックしてください。ファイル名がリネームされます。
念の為、最初は、画像ファイルのバックアップをとってから実行してください。
実行中に確認用メッセージが表示されますが、不要であれば、コメントアウトしてください。
以下の2行です。
WScript.Echo "  " & objFile.Name & "-->" & newName & "  Rename対象"
WScript.Echo "既にリネーム後の同一ファイルが存在するのでスキップします"
行の先頭に'(シングルクオート)を付けるとコメントになります。
    • good
    • 0
この回答へのお礼

思っている事が出来ました有難う御座いました。

お礼日時:2016/09/26 09:45

補足要求です。


質問1:バッチファイル(拡張子:bat)での作成を望まれていますが、バッチファイルで実行するには
荷が重すぎます。VBScript(拡張子:vbs)で作成しても良いでしょうか?
VBScript(拡張子:vbs)でも、それをダブルクリックする同様の処理ができます。

上記でYesの前提で、以下の質問です。Noの場合は以下の質問は無視してください。
質問2:JPG画像の拡張子はjpgでしょうか、それともjpegでしょうか、それとも両方でしょうか?

質問3:ファイル名の末尾4桁を削除したいということですが、無条件に削除すると以下のような
事態が予想されます。(拡張子がjpgの前提)
ファイル名:abcdefg( 1).jpg の場合、
1回目のバッチ処理の実行後:abcdefg.jpg ・・・期待する結果
2回目のバッチ処理の実行後:abc.jpg   ・・・たぶんこれは期待しない結果
3回目のバッチ処理の実行後:abc.jpg   ・・・末尾が5桁以上でないので処理しない。これは期待する結果

上記のようなことが発生してもよいなら、無条件に末尾4桁削除で行いますが、
たぶん、2回目のときは、abcdefg.jpgが期待する結果かと思われます。
つまり、1回目のバッチ処理の実行後は、以降はファイル名を変更したくないということです。

上記を実行するためには、末尾4桁の削除ではなく、末尾に"("+任意の文字+")"があれば、
それを()を含めて削除するほうが良いかと思いますがいかがでしょうか。
例:
abc( 123).jpg は abc.jpgに変更
abc( ).jpg は abc.jpgに変更
abc().jpg は abc.jpgに変更
abcdef.jpgは変更なし
    • good
    • 0
この回答へのお礼

説明不足ですいません。
>>VBScript(拡張子:vbs)でも、それをダブルクリックする同様の処理ができます。
それをフォルダに入れてダブルクリックで処理できるならVBScriptでも大丈夫です。

>>JPG画像の拡張子はjpgでしょうか、それともjpegでしょうか、それとも両方でしょうか?
拡張子はjpgです。

>>質問3
質問3はまさにその通りです。なので、末尾4桁の削除ではなく、末尾に"("+任意の文字+")"があれば、
それを()を含めて削除するでお願いします。

お礼日時:2016/09/24 16:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!