Batch file 使用.bat将文件复制到其他位置
是否可以使用通配符(而不是硬编码整个文件名)将文件从一个位置复制到另一个位置?另外,我想将HHSS(小时和秒)附加到文件名 示例:我们的系统每天都会生成一些文件,其名称格式如下:Batch file 使用.bat将文件复制到其他位置,batch-file,file-copying,Batch File,File Copying,是否可以使用通配符(而不是硬编码整个文件名)将文件从一个位置复制到另一个位置?另外,我想将HHSS(小时和秒)附加到文件名 示例:我们的系统每天都会生成一些文件,其名称格式如下: GL_YYYYMMDD.txt AP_YYYYMMDD.txt 我想将这些文件复制/移动到另一个名为“备份”的文件夹中,并附加HHSS(小时和秒),以便文件名看起来像: GL_YYYYMMDDHHSS AP_YYYYMMDDHHSS 到目前为止,我所拥有的: Rem Determine date Set mm1=%
GL_YYYYMMDD.txt
AP_YYYYMMDD.txt
我想将这些文件复制/移动到另一个名为“备份”的文件夹中,并附加HHSS(小时和秒),以便文件名看起来像:
GL_YYYYMMDDHHSS
AP_YYYYMMDDHHSS
到目前为止,我所拥有的:
Rem Determine date
Set mm1=%date:~4,2%
Set dd1=%date:~7,2%
Set yyyy1=%date:~10,4%
REM Determine Time
Set HH=%time:~0,2%
IF "%HH:~0,1%" == " " SET HH=0%HH:~1,1%
Set MM=%time:~3,2%
Set SEC=%time:~6,2%
Set runtime=%HH%%MM%%SEC%
rem Seconday date backup
cd E:\Blackline\DailyFiles
copy GL* E:\Blackline\Backups\"GL*%runtime%"
pause
目标文件规范中的星号通配符(*
)仅适用于文件名相同列从源到目标的精确复制,由最后一个点(
)终止和重新启动,因为传统上表示文件类型或“扩展名”:
这将产生以下结果,并在文件名的test1
/test2
/test3
部分末尾追加时间:
M:\t\a>dir
Volume in drive M is MyDrive
Volume Serial Number is ABCD-EF01
Directory of M:\t\a
08/28/2017 05:42 PM <DIR> .
08/28/2017 05:42 PM <DIR> ..
08/28/2017 05:51 PM 227 copywithtime.bat
08/28/2017 05:42 PM 17 test1.dat
08/28/2017 05:42 PM 17 test2.dat
08/28/2017 05:42 PM 17 test3.dat
3 File(s) 51 bytes
2 Dir(s) 1,050,894,336 bytes free
M:\t\a>copywithtime
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
M:\t\a>dir ..\b
Volume in drive M is MyDrive
Volume Serial Number is ABCD-EF01
Directory of M:\t\b
08/28/2017 05:44 PM <DIR> .
08/28/2017 05:44 PM <DIR> ..
08/28/2017 05:42 PM 17 test1175134.dat
08/28/2017 05:42 PM 17 test2175134.dat
08/28/2017 05:42 PM 17 test3175134.dat
3 File(s) 51 bytes
2 Dir(s) 1,050,894,336 bytes free
M:\t\a>
M:\t\a>dir
驱动器M中的卷是MyDrive
卷序列号为ABCD-EF01
M:\t\a的目录
2017年8月28日下午5:42。
2017年8月28日下午5:42。。
2017年8月28日下午5:51 227 copywithtime.bat
2017年8月28日下午5:42 17测试1.dat
2017年8月28日下午5:42 17 test2.dat
2017年8月28日下午5:42 17 test3.dat
3个文件51字节
2个目录1050894336个可用字节
M:\t\a>copywithtime
已复制1个文件。
已复制1个文件。
已复制1个文件。
M:\t\a>dir..\b
驱动器M中的卷是MyDrive
卷序列号为ABCD-EF01
M:\t\b的目录
2017年8月28日下午5:44。
2017年8月28日下午5:44。。
2017年8月28日下午5:42 17 test1175134.dat
2017年8月28日下午5:42 17 test2175134.dat
2017年8月28日下午5:42 17 test3175134.dat
3个文件51字节
2个目录1050894336个可用字节
M:\t\a>
试试这个。如果删除.txt扩展名,请复制文件,然后重新添加扩展名,最后复制的文件保留其原始名称和添加的时间戳
Rem Determine date
Set mm1=%date:~4,2%
Set dd1=%date:~7,2%
Set yyyy1=%date:~10,4%
REM Determine Time
Set HH=%time:~0,2%
IF "%HH:~0,1%" == " " SET HH=0%HH:~1,1%
Set MM=%time:~3,2%
Set SEC=%time:~6,2%
Set runtime=%HH%%MM%%SEC%
rem Seconday date backup
cd E:\Blackline\DailyFiles
rename *.txt *.
copy GL* E:\Blackline\Backups\GL*%runtime%.txt
rename *. *.txt
pause
使用
FOR
命令列出要处理的文件。然后,您可以获得要复制到输出中的确切输出文件名。问题是,文件名每天都在更改。今天的文件名是GL_20170828,明天的文件名是GL_20170829,因此我不知道如何将此文件复制到备份文件夹并将HHSS添加到其名称(GL_201708280547)。另外,我对批处理脚本非常陌生。我只能假设yyyyMMdd
与特定文件相关。将当前时间附加到该名称没有任何意义,因为该时间仅与批命名过程相关,而与文件本身无关。使用文件创建时间不是更好、更相关的附加内容吗?YYYYMMDD将是从我们的系统创建文件的日期。此外,这也是我们的第三方要求的命名格式。这就是我考虑将HHMM添加到此名称的原因,以便在未知原因下一天内创建两个文件时可以处理和保存。在这种情况下,粒度是一个考虑因素。是否可能在同一分钟内生成两个文件?(在这种情况下,可能不是;但这是一个值得问的问题。)同样的第二秒?同样的厘米秒?只是一个未来使用的想法;你描述的场景表明这不太可能是个问题。嗯。。如果您参考它的实际名称(星号)会更好吗?请注意,时间取决于本地,我在我的zh TW机器上没有得到正确的结果,尽管这在OP中起作用machine@SteveFest我不明白关于通配符的问题。你能把这个问题再详细一点吗?*
@SteveFest噢,哈哈,明白了。实际上,虽然它在英语中被称为星号,但在DOS中(它作为通配符的用法就是从那里来的)它总是被称为“星”。就像“句号”被称为“点”一样。只是那些传统/行话中的一种。:-)请注意,这是独立于语言环境的-对于mm1
,我得到/0
,/3
对于dd1
,我得到了yyyy1
的工作日,尽管这在OP的机器中可以工作。
M:\t\a>dir
Volume in drive M is MyDrive
Volume Serial Number is ABCD-EF01
Directory of M:\t\a
08/28/2017 05:42 PM <DIR> .
08/28/2017 05:42 PM <DIR> ..
08/28/2017 05:51 PM 227 copywithtime.bat
08/28/2017 05:42 PM 17 test1.dat
08/28/2017 05:42 PM 17 test2.dat
08/28/2017 05:42 PM 17 test3.dat
3 File(s) 51 bytes
2 Dir(s) 1,050,894,336 bytes free
M:\t\a>copywithtime
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
M:\t\a>dir ..\b
Volume in drive M is MyDrive
Volume Serial Number is ABCD-EF01
Directory of M:\t\b
08/28/2017 05:44 PM <DIR> .
08/28/2017 05:44 PM <DIR> ..
08/28/2017 05:42 PM 17 test1175134.dat
08/28/2017 05:42 PM 17 test2175134.dat
08/28/2017 05:42 PM 17 test3175134.dat
3 File(s) 51 bytes
2 Dir(s) 1,050,894,336 bytes free
M:\t\a>
Rem Determine date
Set mm1=%date:~4,2%
Set dd1=%date:~7,2%
Set yyyy1=%date:~10,4%
REM Determine Time
Set HH=%time:~0,2%
IF "%HH:~0,1%" == " " SET HH=0%HH:~1,1%
Set MM=%time:~3,2%
Set SEC=%time:~6,2%
Set runtime=%HH%%MM%%SEC%
rem Seconday date backup
cd E:\Blackline\DailyFiles
rename *.txt *.
copy GL* E:\Blackline\Backups\GL*%runtime%.txt
rename *. *.txt
pause