Windowsバッチを使用してフォルダ内のすべてのファイルの名前を変更するにはどうすればよいですか?基本的に、から始まる名前の部分は_Done
削除する必要があります。
some_file_name_Done_34534576456.CSV
-> some_file_name.CSV
some_other_file_name_Done_23232343.CSV
->some_other_file_name.CSV
Windowsバッチを使用してフォルダ内のすべてのファイルの名前を変更するにはどうすればよいですか?基本的に、から始まる名前の部分は_Done
削除する必要があります。
some_file_name_Done_34534576456.CSV
-> some_file_name.CSV
some_other_file_name_Done_23232343.CSV
->some_other_file_name.CSV
これを試してください、バッチの解決策:
@echo off &setlocal enabledelayedexpansion
FOR %%i in (*.*) do call:process "%%~i"
GOTO :eof
:process
set "fname=%~n1"
set "tname=%fname:*_Done=%"
if "%fname%"=="%tname%" echo %~1: nothing to do&goto :eof
set "fname=!fname:_Done%tname%=!%~x1"
if exist "%fname%" echo %fname%: already exists&goto :eof
ren "%~1" "%fname%"
goto :eof
endlocal
編集:明確!
にするためにいくつかをに変更しました。%
これは効果を変更しません。
別の言語を使用してもかまわない場合は、正規表現で名前を変更できます。これがあなたがJScriptで求めたものです。これをsomething.jsとして保存し、CSVファイルを含むディレクトリに配置して、で実行しcscript /nologo something.js
ます。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.GetFolder(".");
var files = new Enumerator(folder.Files);
while (!files.atEnd()) {
var file = '' + files.item();
if (/\.csv$/i.test(file)) {
var dest = file.replace(/_Done[^\.]+/i, '');
if (dest != file) {
WSH.Echo('Renaming ' + file + ' -> ' + dest);
files.item().Move(dest);
}
}
files.moveNext();
}