批处理文件复制并覆盖文件,不管文件名是什么
我需要创建一个批处理文件,每天备份10个文件到我们的服务器上。为了提供一个简短的背景,我们使用支付系统,每天将这些文件分发出去,我们希望确保这些文件每天都上传到服务器上,但是,这些文件的文件名会每天都改变,这意味着覆盖可能不会工作。但我可以自信地创建一个批处理文件来进行复制和覆盖,但我不确定如何用新文件名的10批文件覆盖这些文件。批处理文件复制并覆盖文件,不管文件名是什么
你能提供帮助吗?
亲切的问候,
广告
:: this deletes 10 files named "file1.txt" to "file10.txt"
for /L %%a in (1,1,10) do del R:\Test\file%%a.txt
:: this takes ALL of the files matching the mask and copies them to
:: "file*.txt" at the destination
for /f "tokens=1*delims=: " %%a in (
'dir /b /a-d "C:\Users\Username\Desktop\Test*" ^|findstr /n /r "." ') do (
echo xcopy "C:\Users\Username\Desktop\%%b" "R:\test\file%%a.txt"
)
的第一个命令应该是显而易见的。仅
第二简单地列出源目录,名称,无匹配“测试*”文件的数据夹并指示输出到findstr
其中/n
号每一行匹配/r
正则表达式“” (这将是所有。)
的findstr
输出将是以下形式的
1:测试one.xyz
for
将tokenise结果,%%a
接收部分之前分隔符序列和%%b
之后的部分。分隔符分别设置为:
和空间; findstr
计数每个作为分隔符,以及作为一个分隔符字符串。
结果是echo
ED,以确保所建议的行动是报道,不执行使得发生任何损坏之前,可以检测到任何错误。
激活copy
,只需删除echo
关键字。
请注意,这些文件仍保留在源代码中,因为您尚未提供关于如何进一步处理它们的任何线索。如果文件被留在原地,他们会在下次运行复制以及 - 在for
循环只会继续计数...
for /f "tokens=1*delims=: " %%a in (
'dir /b /a-d /o-d "C:\Users\Username\Desktop\Test*" ^|findstr /n /r "." '
) do if %%s leq 10 (
echo copy "C:\Users\Username\Desktop\%%b" "R:\test\"
)
将[呼应命令] copy
最新从源目录到目的地的10个文件。
应该很明显如何将10
更改为其他值。
操纵实际的目录名称和维护源目录和目标目录 - 你的事情。
嗨, 对不起,我应该更清楚。 所以备份文件会自动删除在每一天结束的最古老的,所以可以很容易理解,如果备份吐出来,从14日至6月21号文件,然后在一天结束的第14届会除去。从理论上讲,我只需要备份最新的文件,但我不确定如何使用文件名永远不会相同。 我希望这有助于:) – Admaine
@Admaine如果你只需要最新的文件,你可能想看看'forfiles'。示例如何删除所有超过10天的文件:'forfiles -p“C:\ backups”/ D -10/C“cmd/c del @path” – Regejok
如果您只是想要最近的'n'文件,那么在'dir'命令中添加'/ od'命令,然后按照反向日期的顺序提供列表,如果你想限制到'n'文件被传输,在条目之前添加'if %% a leq n' '副本',以便副本仅在序列号小于或等于指定数量的情况下进行。然后你可能不需要改变文件名,所以你可以简单地从目标文件名中除去'filename %% a.txt',只留下目录名。 – Magoo
也许吧。通过将您的代码编辑到您的帖子中向我们显示。 – Magoo
这是我与然而工作的基本代码,我急转直下实现的文件(与千变万化的文件名)需要重写每个夜晚后: XCOPY C:\ Users \用户名\桌面\测试* R: \测试*/Y/Q/S – Admaine
@Admaine纠正我,如果我误解了,但你不能简单地删除旧的备份,然后复制文件?如果不是,名称取决于任何事情/它们是否可以预测? – Regejok