0

ファイル名内の特定の文字列を変更するスクリプトがあります(ファイルは「my_folder」に保存されます):

Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFSO.GetFolder("g:\my folder")
For Each File In Folder.Files
sNewFile = File.Name
sNewFile = Replace(sNewFile,"._epf","_v0_1._epf")
if (sNewFile<>File.Name) then
    File.Move(File.ParentFolder+"\"+sNewFile)
end if
Next

「g:\my folder」の下にフォルダーがない場合、スクリプトは正常に機能します。そうでない場合、「my folder」にフォルダーがあり、それらのフォルダーの 1 つ (または複数) の名前がファイル名に似ている場合、スクリプト置換文字列を乗算するなどの望ましくない結果を引き起こします。

たとえば、「私のフォルダー」に次のものが含まれているとします。

こんにちは(フォルダ)

hello_.epf (ファイル)

その後、スクリプトは最終的にファイル名を次のように変更します。

hello_v0_1_v0_1._epf (望ましくない結果)

そして、私は結果を次のようにしたい:

hello_v0_1._epf

この方法で迅速に助けていただければ幸いです。ありがとう。

4

1 に答える 1

0

私はあなたの VBScript がどこで間違っているのかを理解しようとはしませんでした。しかし、質問にbatch-filebatch、およびのタグを付けbatch-renameました。

コマンド プロンプトから実行できる簡単なワンライナーを次に示します。バッチ スクリプトも必要ありません。

for %F in ("g:\my folder\*._epf") do @ren "%F" "%~nF_v0_1%~xF"

バッチ スクリプト内でコマンドを実行する場合は、すべてのパーセントを 2 倍にする必要があります。

@echo off
for %%F in ("g:\my folder\*._epf") do ren "%%F" "%%~nF_v0_1%%~xF"

編集

上記は、拡張子の前に、各ファイル名に新しいバージョンのサフィックスを追加します。

既存のバージョン番号を置き換えたい場合、解決策はさらに簡単です。あなたのバージョンは常に で始まり、ファイル拡張子に現れることはない_vと思います。v

ren "g:\my folder\*_v0_1._epf" "*v0_2.*"

上記のコマンドは、.で終わるすべてのファイルの名前を変更します_v0_1._epf。名前に最後に出現するまでのすべての文字を保持しv、新しいバージョン番号を追加し、最後に元の拡張子を追加します。

Windows RENAME コマンドはワイルドカードをどのように解釈しますか?を参照してください。REN がワイルドカードを使用する方法に関する規則については、

于 2012-12-04T15:03:44.663 に答える