1

ファイルの名前に対応するフォルダー内のファイルをコピーするためのスクリプトに取り組んでおり、宛先フォルダーが存在することを確認し、それが確認されたらファイルをコピーする FOR ループを使用してその部分を解決しました。 . 例: 11-01111_ABC_DEF.pdf は /11/0111/ に入ります。長さは 1 ~ 2 文字異なる場合がありますが、形式は一貫しています。以下の基本的なスクリプトをコピーしました。

私の問題は、同じ名前のファイルを処理する必要がある場合があることです。ファイルの 1 つまたは複数のコピーが宛先フォルダーに既に存在する場合、ファイルの末尾に数値を連結するにはどうすればよいですか?

setlocal enableextensions enabledelayedexpansion
for %%x in (*.PDF *.TXT) do (
  set "source="C:\files"
  set "dest=R:\"  
  set "filename=%%x"
  set "prefix=!filename:~0,2!"
  set "folder=!filename:~3,5!"

  if not exist !dest!\!prefix!\!folder! MOVE !filename! !source!\failed 
  if exist !source!\!filename! MOVE !filename! !dest!\!prefix!\!folder! 
)
4

2 に答える 2

0
setlocal ENABLEDELAYEDEXPANSION
set "dest=worked"
for %%i in (*.pdf *.txt) do (
   for /f "tokens=1-3* delims=-_." %%j in ("%%i") do (
      if exist "%dest%\%%j\%%k" if exist "%dest%\%%j\%%k\%%i" if exist "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" (
     for /f "tokens=1-9* delims=-_." %%n in ('dir %dest%\%%j\%%k\%%j-%%k*-* /b') do set /a inc=%%p
     set /a inc+=1
     move "%%i" "%dest%\%%j\%%k\%%j-%%k-!inc!_%%l_%%m" || move "%%~i" "failed"
     set inc=
     )
      if exist "%dest%\%%j\%%k\%%i" if not exist "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" (
     move "%%i" "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" || move "%%~i" "failed"
     )
      if exist "%dest%\%%j\%%k" if not exist "%dest%\%%j\%%k\%%~i" (
     move "%%~i" "%dest%\%%j\%%k\%%~i" || move "%%~i" "failed"
     )
      if not exist "%dest%\%%j\%%k" move "%%~i" "failed"
      )
)

何かを変更したい場合は、これを .txts および .pdfs コメント付きのフォルダーに入れてください。

于 2013-10-09T01:42:06.840 に答える