0

Windowsバッチを使用してフォルダ内のすべてのファイルの名前を変更するにはどうすればよいですか?基本的に、から始まる名前の部分は_Done削除する必要があります。

some_file_name_Done_34534576456.CSV-> some_file_name.CSV some_other_file_name_Done_23232343.CSV->some_other_file_name.CSV

4

2 に答える 2

2

これを試してください、バッチの解決策:

@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

編集:明確!にするためにいくつかをに変更しました。%これは効果を変更しません。

于 2013-03-20T13:38:21.610 に答える
1

別の言語を使用してもかまわない場合は、正規表現で名前を変更できます。これがあなたが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();
}
于 2013-03-20T13:18:32.347 に答える