2016-06-22 7 views
2

親フォルダには多くのサブフォルダがあり、その名前に@aというサブフォルダが含まれています。例えば、
"@a"をフィルタリングしてフォルダの名前を変更する

[email protected] 
@[email protected] 
@atest2 
[email protected] 

私は@a一部を除外するすべてのフォルダを一括して名前を変更したいです。 希望する出力は次のようになります。

testtest 
test 
test2 
nest3 

注:フィルタリング後に2つのフォルダが同じ名前になることはありません。

答えて

3

バッチファイルには、正規表現をサポートしていませんが、あなたはstring substitutionを使用することができます。
%FOLDER:@a=%は、空の文字列(=の後の部分)と@aに置き換えられます。

あなたはforループを使用して@aを含むすべてのフォルダを処理することができます: は
コマンドはちょうどそれらを印刷しますfor /d%G in (*@a*) do echo %G
注:これはコマンドラインで機能しますが、バッチファイルには%%Gを使用する必要があります。

だから、すべてのフォルダの名前から@aを削除するスクリプト:

setlocal EnableDelayedExpansion 
for /d %%G in (*@a*) do (
    set FOLDER=%%G 
    move !FOLDER! !FOLDER:@a=! 
) 

コマンドsetlocal EnableDelayedExpansionは、ループ内で必要とされている変数のdelayed expansionを使用できます。変数は、行が実行されるときに展開される%ではなく、!で囲まれます。

+0

はうまくいきます!ありがとう – Rishav

2
setlocal EnableDelayedExpansion 
for /d %%I in (*) do (
    set NAME=%%I 
    set NEW=!FOLDER:@a=! 
    move !NAME! !NEW! 
) 

試してみてください。

関連する問題