复制多个文件并将日期添加到名称bat

时间:2015-06-25 07:49:04

标签: windows batch-file xcopy copying renaming

我必须制作执行此操作的.bat文件:

从O:\ siirto复制名称以“ls”开头的所有文件。致C:\ siirto。 输出的名称与源中的名称相同。但它会将当前日期添加到文件名的末尾。

我试过以下只是为了测试,当然它没有工作:D。但它可以更好地解释我试图做的比上面的解释更好。

echo off
xcopy O:\siirto\ls* C:\siirto\ls%date.txt
pause

当然不行。 但这可能与一个.bat文件有关。 或者我必须做所有ls.txt文件他们自己的.bat文件或行。

类似于LS1.txt,LS2.txt LS3.txt

echo off
xcopy O:\siirto\LS1.txt C:\siirto\ls1%date
pause

我不知道%date应该如何添加到代码中,还需要其他代码来编写代码吗?

我还在编程中穿着童鞋......

感谢

4 个答案:

答案 0 :(得分:1)

您需要将文件的迭代与FOR命令和%DATE%环境变量结合起来。阅读HELP FOR,注意%〜扩展语法,并尝试以下代码。

for %%a in (o:\siirto\ls*) do (
   echo copy "%%a" "c:\siirto\%%~na-%date%%%~xa"
)

仔细测试后,删除echo命令。

您可以通过将一些可配置信息移出循环来概括您的代码

set src=o:\siirto\ls*
set dest=c:\siirto
for %%a in (%src%) do (
  copy "%%a" "%dest%\%%~na-%date%%%~xa"
)

并且,如果%date%命令返回无效字符,请阅读此SO问题Batch script date into variable的已接受答案,然后将变量更改为包含当前日期的变量格式。< / p>

答案 1 :(得分:0)

%date%可能包含not allowed in file names字符。尝试下一个与语言环境无关的方法:

@ECHO OFF
SETLOCAL enableextensions

for /F %%g in ('
  wmic OS get LocalDateTime /value^|findstr "="
  ') do for /F %%G in ("%%g") do set "_%%G"

set "_LocalDateTime=%_LocalDateTime:~0,8%"

for /F "delims=" %%G in ('
  dir /b O:\siirto\ls*.txt
  ') do echo copy /B "O:\siirto\%%G" "C:\siirto\%%~nG_%_LocalDateTime%%%~xG"

资源(必读):

答案 2 :(得分:0)

默认情况下,变量%date%包含当前日期 - 但日期的格式取决于用户设置,因此它可能包含分隔符,例如/-.可能有日期名称和空格分隔符,可以使用抑制前导零的日期编号和月份编号。

有很多关于将日期字符串格式化为可用格式的文章 - 建议格式为yyyymmdd,因为该格式按名称按时间顺序自动生成。

请注意,使用变量date并不是一个好主意,因为该日期是由系统建立和维护的,任何用户设置都将覆盖假设的系统设置。几乎使用任何其他有效变量名称(同一条评论适用于randomtime等。)

因此,假设您以所需的格式将日期分配给变量today,然后

for %%a in (o:\siirto\ls*.txt) do (
   echo(copy "%%a" "c:\siirto\%%~na%today%%%~xa"
)

将执行所需的副本。 %%~na表示%%a%%~xa扩展部分中文件名的名称部分。通常应使用%varname%访问变量。文件名为"enclosed in quotes",以确保文件名中的分隔符(例如 Space )被视为不具有分隔符特殊含义的常规字符。

为了测试目的,所需的COPY命令仅为ECHO在您确认命令正确后,将ECHO(COPY更改为COPY以实际复制文件。附加>nul以取消报告消息(例如1 file copied

答案 3 :(得分:0)

您可以使用forfiles 1

在一行中完成所有操作
    forfiles /P O:\siirto /M ls*.txt /C "cmd /c copy @path C:\siirto\@fname-%date:~6,4%-%date:~3,2%-%date:~0,2%.txt"

此处forfiles查看指定路径/P中与掩码/M匹配的所有文件,然后对找到@path的每个文件运行命令以将其复制到附加日期的新位置。 @fname这里只提供没有路径或扩展名的文件名。

%date%变量通常会产生25/06/2015,甚至是2015年6月25日星期四,具体取决于您的设置。这就是您需要指定部分内容的原因。

%date:~6,4%从日期的第七位到第11位选择(计数从0开始),产生年份。 %date:~3,2%为您提供月份(或根据您来自世界的哪一天),%date:~0,1%为您提供一天(或一个月,同样取决于您所在的位置)。

您可能需要稍微调整一下以获得所需的结果。