我需要定期复制文件,例如每小时一次,所以我尝试设置一个xcopy批处理,说它应该复制需要复制到另一个文件夹的文件。现在当它复制时,它会覆盖那些不应该做的文件。
当复制文件时,它应该创建一个新文件,名称类似于File.txt,File-COPY1.txt,File-COPY2.txt或类似的东西。
有什么办法吗?
提前致谢。
答案 0 :(得分:2)
只需在文件名中添加时间戳,即可为每次运行创建单个文件。像这样:
XCOPY "File.txt" "[TargetDir]\File1_%time:~0,2%_%time:~3,2%_%time:~6,2%.txt"
如果复制操作发生在11:30:05,则解析为文件名,读作File1_11_30_05.txt
。 %time:~0,2%
部分从存储在变量%time%
中的时间字符串中提取2位数。
此外,您还可以以相同的方式添加日期。您可以将变量%date%
用于此目的。
如果您确实需要File-COPY1.txt
,File-COPY2.txt
等模式,则需要更多工作。告诉我们时间戳方法是否不充分。
答案 1 :(得分:1)
此批处理采用相对或显式两个目录的名称,并将第一个目录中的所有文件复制到第二个目录,但在文件名和扩展名之间添加 - #(其中#是副本的数量)第二个目录中的文件)。因此,如果只有一个文件(MISC.txt
)从dir1复制到dir2,但它被复制了4次,则dir2将包含4个文件:(MISC-1.txt
MISC-2.txt
MISC-3.txt
和MISC-4.txt
)
要使用zcopy.bat
,请将其称为zcopy fromDir toDir
zcopy.bat
@echo off
if "%1"=="" goto :eof
if "%1"=="/?" type %~dpnx0 & goto :eof
if "%2"=="" goto :eof
if not exist %2 md %2
setlocal enableDelayedExpansion
for %%x in (%1\*.*) do (
set this=
set count=1
if "%%~xx"=="" (
set backstop=.
) else (
set backstop=
)
for /f %%y in ('dir /b /a:-d /o:n "%2\%%~nx-*%%~xx!backstop!" 2^>nul') do (
set this=%%~nxy
)
if not "!this!"=="" (
set count=!this:%%~nx-=!
if "%%~xx"=="" (
set /a count=!count!+1
) else (
set /a count=!count:%%~xx=! + 1
)
)
set target=%%~nx-!count!%%~xx
echo copy "%%x" "%2\!target!"
copy "%%x" "%2\!target!" > nul 2>&1
)
如果目录%2
不存在,则上面的代码将创建它。
答案 2 :(得分:1)
我用它来每天备份文件。
set aa=%date:~4,2%%date:~7,2%%date:~12,2%
copy filename.txt c:\backupfolder\filename%aa%.txt
希望有所帮助。 斯科特....
答案 3 :(得分:0)
迭代文件名,即每次给出一些新名称。你可以简单地附加数字。
使用一个计数器,每次增加它&递增计数器与fileName连接