Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 自动复制文件而不覆盖,而是创建编号的文件_Batch File_Vbscript_Xcopy_Robocopy - Fatal编程技术网

Batch file 自动复制文件而不覆盖,而是创建编号的文件

Batch file 自动复制文件而不覆盖,而是创建编号的文件,batch-file,vbscript,xcopy,robocopy,Batch File,Vbscript,Xcopy,Robocopy,我需要定期复制文件,例如每小时一次,所以我尝试设置一个xcopy批处理,告诉它应该将需要复制的文件复制到另一个文件夹。现在当它复制时,它会覆盖文件,这不是它应该做的 复制文件时,应该创建一个新文件,名为file.txt、file-COPY1.txt、file-COPY2.txt或类似文件 有办法吗 提前感谢。迭代文件名,即每次都提供一些新名称。您可以简单地附加数字 使用一个计数器,每次递增它&incremented计数器都与文件名连接您只需在文件名中添加一个时间戳,即可为每次运行创建单独的文件。

我需要定期复制文件,例如每小时一次,所以我尝试设置一个xcopy批处理,告诉它应该将需要复制的文件复制到另一个文件夹。现在当它复制时,它会覆盖文件,这不是它应该做的

复制文件时,应该创建一个新文件,名为file.txt、file-COPY1.txt、file-COPY2.txt或类似文件

有办法吗


提前感谢。

迭代文件名,即每次都提供一些新名称。您可以简单地附加数字

使用一个计数器,每次递增它&incremented计数器都与文件名连接

您只需在文件名中添加一个时间戳,即可为每次运行创建单独的文件。大概是这样的:

XCOPY "File.txt" "[TargetDir]\File1_%time:~0,2%_%time:~3,2%_%time:~6,2%.txt"
如果复制操作在11:30:05进行,则解析为文件名,其内容为
File1\u 11\u 30\u 05.txt
%time:~0,2%
部分从变量
%time%
中存储的时间字符串中提取2位数字

此外,您还可以以相同的方式添加日期。为此,可以使用变量
%date%


如果你真的需要像
File-COPY1.txt
File-COPY2.txt
等这样的模式,这需要更多的工作。如果时间戳方法不够,请告诉我们。

此批处理采用两个目录的名称(相对或显式),并将第一个目录中的所有文件复制到第二个目录,但在文件名和扩展名之间添加-#(其中#是第二个目录中文件的副本数)。因此,如果只有一个文件(
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
不存在,上面的代码将创建它。

我使用它每天备份文件

    set aa=%date:~4,2%%date:~7,2%%date:~12,2%
    copy filename.txt c:\backupfolder\filename%aa%.txt
希望这能帮助一些人。
Scott…

我不是故意装傻什么的,但我必须用起始目录替换%1,用目标目录替换%2吗?我应该在其他参数中添加什么?谢谢:)@user1688322-不,您不需要编辑代码。%1、%2%3等是传递到批处理文件的参数的内置占位符。因此,如果您输入
zcopy fromDir toDir
,则
%1
=
fromDir
%2
=
toDir
,而
%3
保留为空。