如何使用批处理文件复制(和增加)一个文件的多个实例
How to Copy (and increment) Multiple Instances of a File Using Batch File
我需要创建一个批处理文件来复制一个文件并在将其放置在目标位置时递增它。例子.
copy C:\TEMP\MyDoc.txt E:\MyData\
基本上,我每次启动它时都需要这个复制命令来复制(现在它做得很好)。我希望它增加文件名而不是覆盖它。如果我运行这3次或100次(永远不是某个数字)我想在"MyData"文件夹上看到:
MyDoc.txt
MyDoc(1).txt
...
或复制 (1) 我不太确定复制文件的语法是什么,我也不一定关心。我只是想确保我不会覆盖我的跳跃驱动器上预先存在的文件。
要注意的是,我是在旧的 运行 Windows CE 的 Allen Bradley PanelView Plus 上执行此操作。任何帮助将不胜感激。
你可以这样试试:
@echo off
set Source=C:\TEMP\MyDoc.txt
set Destination=E:\MyData\
set Filename=MyDoc
set a=1
:loop
if exist %Destination%\%Filename%(%a%).txt set /a a+=1 && goto :loop
copy %Source% %Destination%\%Filename%(%a%).txt
pause
这是一些打屁股的代码:
放入名为 easycopy.bat 的文件并使用,
'easycopy SourceDirectory DestinationDirectory'。
@rem easycopy
@rem Usage: easycopy SourcePath TargetPath (SourcePath can be the path to a directory or a single file)
@rem release 24/05/2020
@echo off
setlocal enableDelayedExpansion
rem Initialize and validate arguments
if "%~2" equ "" echo Error: Insufficient arguments>&2&exit /b 1
set "source=%1"
set "target=%2"
set /a counter=0
if not exist %target%\ echo Error: Target folder %target% does not exist>&2&exit /b 1
if not exist %source%\ call :newfile %source% %target% & set /a counter+=1 & goto :end
rem Do the work
for /r %source% %%F in (*) do if "%%~dpF" neq %target%\ (
if exist %target%\"%%~nxF" (
call :newfile "%%F" %target% & set /a counter+=1
) else copy "%%F" %target% >nul & set /a counter+=1
)
:end
echo.
if %errorlevel% EQU 0 echo %counter% file/s was/were copied.
if %errorlevel% GTR 0 echo Check if something went wrong.
goto :eof
:newfile <Source> <Destination>
set Source=%1
set Destination=%2
set Filename=%~n1
set Extention=%~x1
set a=1
:loop
if not exist %Destination%\"%Filename%%Extention%" copy %Source% %Destination%\"%Filename%%Extention%" >nul & goto :eof
if exist %Destination%\"%Filename%(%a%)%Extention%" set /a a+=1 && goto :loop
copy %Source% %Destination%\"%Filename%(%a%)%Extention%" >nul
我需要创建一个批处理文件来复制一个文件并在将其放置在目标位置时递增它。例子.
copy C:\TEMP\MyDoc.txt E:\MyData\
基本上,我每次启动它时都需要这个复制命令来复制(现在它做得很好)。我希望它增加文件名而不是覆盖它。如果我运行这3次或100次(永远不是某个数字)我想在"MyData"文件夹上看到:
MyDoc.txt
MyDoc(1).txt
...
或复制 (1) 我不太确定复制文件的语法是什么,我也不一定关心。我只是想确保我不会覆盖我的跳跃驱动器上预先存在的文件。
要注意的是,我是在旧的 运行 Windows CE 的 Allen Bradley PanelView Plus 上执行此操作。任何帮助将不胜感激。
你可以这样试试:
@echo off
set Source=C:\TEMP\MyDoc.txt
set Destination=E:\MyData\
set Filename=MyDoc
set a=1
:loop
if exist %Destination%\%Filename%(%a%).txt set /a a+=1 && goto :loop
copy %Source% %Destination%\%Filename%(%a%).txt
pause
这是一些打屁股的代码:
放入名为 easycopy.bat 的文件并使用,
'easycopy SourceDirectory DestinationDirectory'。
@rem easycopy
@rem Usage: easycopy SourcePath TargetPath (SourcePath can be the path to a directory or a single file)
@rem release 24/05/2020
@echo off
setlocal enableDelayedExpansion
rem Initialize and validate arguments
if "%~2" equ "" echo Error: Insufficient arguments>&2&exit /b 1
set "source=%1"
set "target=%2"
set /a counter=0
if not exist %target%\ echo Error: Target folder %target% does not exist>&2&exit /b 1
if not exist %source%\ call :newfile %source% %target% & set /a counter+=1 & goto :end
rem Do the work
for /r %source% %%F in (*) do if "%%~dpF" neq %target%\ (
if exist %target%\"%%~nxF" (
call :newfile "%%F" %target% & set /a counter+=1
) else copy "%%F" %target% >nul & set /a counter+=1
)
:end
echo.
if %errorlevel% EQU 0 echo %counter% file/s was/were copied.
if %errorlevel% GTR 0 echo Check if something went wrong.
goto :eof
:newfile <Source> <Destination>
set Source=%1
set Destination=%2
set Filename=%~n1
set Extention=%~x1
set a=1
:loop
if not exist %Destination%\"%Filename%%Extention%" copy %Source% %Destination%\"%Filename%%Extention%" >nul & goto :eof
if exist %Destination%\"%Filename%(%a%)%Extention%" set /a a+=1 && goto :loop
copy %Source% %Destination%\"%Filename%(%a%)%Extention%" >nul