复制多个文件并将日期添加到名称 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
不是一个好主意,因为该日期由系统建立和维护,任何用户设置都将覆盖假定的系统设置。使用几乎任何其他有效的变量名称(相同的注释适用于 random
和 time
等)。
因此,假设您以您想要的格式将日期分配给变量 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
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)
您可以使用 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,甚至 Thu 25/06/2015 的结果,具体取决于您的设置。这就是为什么你需要指定它的一部分。
%date:~6,4%
从日期的第7位到第11位(从0开始计数)中选出年份。 %date:~3,2%
为您提供月份(或日期,具体取决于您来自世界的哪个地方),%date:~0,1%
为您提供日期(或月份,同样取决于您所在的位置)。
您可能需要稍微尝试一下才能获得您想要的结果。
我必须制作 .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
不是一个好主意,因为该日期由系统建立和维护,任何用户设置都将覆盖假定的系统设置。使用几乎任何其他有效的变量名称(相同的注释适用于 random
和 time
等)。
因此,假设您以您想要的格式将日期分配给变量 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
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)
您可以使用 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,甚至 Thu 25/06/2015 的结果,具体取决于您的设置。这就是为什么你需要指定它的一部分。
%date:~6,4%
从日期的第7位到第11位(从0开始计数)中选出年份。 %date:~3,2%
为您提供月份(或日期,具体取决于您来自世界的哪个地方),%date:~0,1%
为您提供日期(或月份,同样取决于您所在的位置)。
您可能需要稍微尝试一下才能获得您想要的结果。