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

Copying multiple files and adding date to the name bat

我必须制作 .bat 文件谁做这个:

从 O:\siir 复制名称以 "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 应该如何添加到代码中,它是否还需要其他东西来编码?

编程方面还是童鞋...

谢谢

您需要将对文件的迭代与 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% 命令 returns 无效字符,请阅读我对这个 SO 问题 Batch script date into variable 接受的答案,然后将变量更改为包含当前日期的变量使用适当的格式。

%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"

资源(必读):

默认情况下,变量 %date% 包含当前日期 - 但日期的格式取决于用户设置,因此它可能包含分隔符,例如 /-. 可能有日期名和 space-分隔符,并且可能具有带前导零的日数和月数。

SO 上有很多关于将日期字符串格式化为可用格式的文章 - 建议使用格式 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 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO(COPY更改为COPY以实际复制文件。附加 >nul 以禁止报告消息(例如 1 file copied

您可以使用 forfiles1

在一行中完成所有操作
    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,甚至 Thu 25/06/2015 的结果,具体取决于您的设置。这就是为什么你需要指定它的一部分。

%date:~6,4%从日期的第7位到第11位(从0开始计数)中选出年份。 %date:~3,2% 为您提供月份(或日期,具体取决于您来自世界的哪个地方),%date:~0,1% 为您提供日期(或月份,同样取决于您所在的位置)。

您可能需要稍微尝试一下才能获得您想要的结果。