3
set dSource=C:\Games\Steam\steamapps
set dTarget=E:\Demos
set fType=*.dem

xcopy/i "%dSource%\%fType%" "%dTarget%"

これは現在すべてのファイルをコピーする必要があるものですが、すべてのファイルをコピーし、同じ名前のファイルの名前を変更して、両方のコピーが宛先フォルダーに保持されるようにするにはどうすればよいですか。

例:
source:demo.dem
destination:demo.dem

移動先:
destination:demo.dem、demo(1).dem

4

2 に答える 2

2

でこのソリューションを試してくださいcopy

@echo off &setlocal
set "dSource=C:\Games\Steam\steamapps"
set "dTarget=E:\Demos"
set "fType=*.dem"

for %%i in ("%dSource%\%fType%") do if not exist "%dtarget%\%%~nxi" (copy /b "%%~i" "%dtarget%") else call :process "%%~i"
goto :eof

:process
set /a cnt=-1
:loop
set /a cnt+=1
set "fname=%dtarget%\%~n1(%cnt%)%~x1"
if exist "%fname%" goto :loop
copy /b "%~1" "%fname%"
goto :eof

endlocal
于 2013-03-20T08:31:28.413 に答える
0
@ECHO OFF
SETLOCAL
SET source=c:\sourcedir
SET dest=c:\destdir
SET mask=*.*
FOR /f "delims=" %%i IN (
  ' dir /b /a-d "%source%\%mask%" '
  ) DO IF EXIST "%dest%\%%i" (
  SET "destfn="
  SET "sourcefn=%source%\%%i"
  FOR /l %%g IN (1,1,9) DO IF NOT DEFINED destfn IF NOT EXIST "%dest%\%%~ni(%%g)%%~xi" SET destfn=%dest%\%%~ni(%%g^)%%~xi
  IF NOT DEFINED destfn FOR /l %%g IN (10,1,99) DO IF NOT DEFINED destfn IF NOT EXIST "%dest%\%%~ni(%%g)%%~xi" SET destfn=%dest%\%%~ni(%%g^)%%~xi
  IF NOT DEFINED destfn FOR /l %%g IN (100,1,999) DO IF NOT DEFINED destfn IF NOT EXIST "%dest%\%%~ni(%%g)%%~xi" SET destfn=%dest%\%%~ni(%%g^)%%~xi
  IF NOT DEFINED destfn FOR /l %%g IN (1000,1,9999) DO IF NOT DEFINED destfn IF NOT EXIST "%dest%\%%~ni(%%g)%%~xi" SET destfn=%dest%\%%~ni(%%g^)%%~xi
  CALL :copyg
  ) ELSE (XCOPY "%source%\%%i" "%dest%\" >nul)
)
GOTO :eof

:copyg
IF DEFINED destfn (ECHO F|XCOPY "%sourcefn%" "%destfn%" >nul
) ELSE (ECHO "%sourcefn%" NOT copied - out of generation numbers
)
GOTO :eof

警告: 投稿されているように、手順は XCOPY になります。

XCOPY ステートメントを ECHO... に変更し、どの命令が最初に生成される>nulECHO F|を調べることをお勧めします。XCOPY

( >nul はcopiedメッセージを抑制します。これを許可するスイッチがないため、ECHO F|強制的XCOPYに宛先 FILE にコピーします)XCOPY

于 2013-03-20T03:33:48.873 に答える