1

別のフォルダーにバッチ スクリプトがあります。( \test remove\ )

別のフォルダー内のすべての .csv から 14 文字を削除したい ( \test remove\remove from here\ ) 文字を削除するフォルダーはどこにでもある可能性があります (サブディレクトリは例です)

  • 少し背景、14 文字はタイムスタンプ (YYYYMMDDHHMMSS)、.csv ファイルからタイムスタンプを削除したい

スクリプトを実行すると、バッチ スクリプトがあるフォルダから文字が削除されます。

 setlocal EnableDelayedExpansion
 set removeFileLocation="C:\...\Desktop\test remove\remove from here\"

 for /r %removeFileLocation% %%x in (*.csv) do (
      set "oldname=%%~Nx"
      set "newname=!oldname:~,-14!"
      ren "!oldname!.csv" "!newname!.csv"
 )

同様に実行すると、「指定されたファイルが見つかりません」というメッセージが表示されます。ただし、.csv ファイルから文字を正常に削除します。

4

1 に答える 1

0

試してみることをお勧めします

setlocal EnableDelayedExpansion
set "removeFileLocation=C:\...\Desktop\test remove\remove from here"

for /f %%x in (' dir/s/b/a-d "%removeFileLocation%\*.csv" ') do (
  set "oldname=%%~Nx"
  set "newname=!oldname:~,-14!"
  ECHO ren "%%~dpx!oldname!.csv" "!newname!.csv"
)

注: set "removeFileLocation...が変更され (1)、"rabbit's ears"代入全体が囲まれるようになりました。これにより、末尾のスペースが代入された値に含まれないことが保証されます。(2) 末尾\が削除されます。(これは個人の自由です)

は、完全なファイル名のみ (ヘッダーなし) のリストをメモリに作成FOR/Fします。DIR

ファイル名のrenドライブとパスを復元する必要があります。

これは、操作が正しいことを確認するためrenだけのものです。キーワードをECHO削除して名前変更を有効にします。ECHO

元のバージョンで起こっていると私が信じているのはfor/r、すでに名前が変更されたファイルに再遭遇している、または名前を変更するファイルにパス名を割り当てていないため、.csvサブディレクトリで見つけて名前を変更しようとしているということです現在のディレクトリですが、そこには存在しないか、すでに名前が変更されています。

于 2013-07-23T02:25:50.643 に答える