0

コマンド プロンプトを使用して、ファイルの名前をプレフィックス「g_x_」で変更したいと考えています。元のファイル名の構造は次のとおりです。

000_1565.7k

私が試してみました:

ren *.7k g_x_*.7k

そのコードはファイルの名前を「g_x_1565.7k」に変更しますが、ファイルの名前を「g_x_000_1565.7k」にする必要があります

コードが元のファイル名の一部を削除している理由について何か考えはありますか?

ありがとう、

DH

4

3 に答える 3

0
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN (
  'dir /b /a-d *_*.7k ^|findstr /v /b /l "g_x_" '
 ) DO (
  REN "%%a" "g_x_%%a"   
)
GOTO :EOF

dir一致するファイル名を検出し*_*.7k、これは にパイプされ、最初のリテラル ( ) 文字列( )FINDSTRと一致しない ( ) 名前のみを許可します。パイプの前のキャレット ( ) は、パイプが によって実行されるコマンドの一部であり、へのパラメータではないことを CMD に伝えるために必要です。/v/l"g_x_"/b^fordir

結果のファイル名は に割り当てられ%%a、先頭に追加され、名前が変更されます

このアプローチでは、最初に既存のファイル名のリストを作成し、次にそのリストを処理します。その場で名前を変更しようとすると、ファイル aaa_bbb.7k が g_x_aaa_bbb.7k に名前変更され、さらに g_x_g_x_aaa_bbb.7k に名前変更される可能性があります...

于 2013-10-22T01:01:59.507 に答える
0

これは @PeterWright ソリューションの修正版ですが、必要に応じてスイッチを追加/sしてサブディレクトリを処理することもできます。DIR

現状では、名前変更コマンドを画面にエコーするだけです。したがって、画面に表示echoされる内容が気に入った場合は、を削除して名前変更を有効にしてください。

@ECHO OFF
FOR /f "delims=" %%a IN (' dir /b /a-d *_*.7k ') DO (
 echo REN "%%a" "g_x_%%~nxa"   
)
pause
于 2013-10-22T04:57:42.613 に答える