Batch file 使用.bat将文件复制到其他位置

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

是否可以使用通配符(而不是硬编码整个文件名)将文件从一个位置复制到另一个位置?另外,我想将HHSS(小时和秒)附加到文件名

示例:我们的系统每天都会生成一些文件,其名称格式如下:

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