2017-06-21 115 views
-3

我需要创建一个批处理文件,每天备份10个文件到我们的服务器上。为了提供一个简短的背景,我们使用支付系统,每天将这些文件分发出去,我们希望确保这些文件每天都上传到服务器上,但是,这些文件的文件名会每天都改变,这意味着覆盖可能不会工作。但我可以自信地创建一个批处理文件来进行复制和覆盖,但我不确定如何用新文件名的10批文件覆盖这些文件。批处理文件复制并覆盖文件,不管文件名是什么

你能提供帮助吗?

亲切的问候,

广告

+1

也许吧。通过将您的代码编辑到您的帖子中向我们显示。 – Magoo

+0

这是我与然而工作的基本代码,我急转直下实现的文件(与千变万化的文件名)需要重写每个夜晚后: XCOPY C:\ Users \用户名\桌面\测试* R: \测试*/Y/Q/S – Admaine

+1

@Admaine纠正我,如果我误解了,但你不能简单地删除旧的备份,然后复制文件?如果不是,名称取决于任何事情/它们是否可以预测? – Regejok

回答

0
:: 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更改为其他值。

操纵实际的目录名称和维护源目录和目标目录 - 你的事情。

+0

嗨, 对不起,我应该更清楚。 所以备份文件会自动删除在每一天结束的最古老的,所以可以很容易理解,如果备份吐出来,从14日至6月21号文件,然后在一天结束的第14届会除去。从理论上讲,我只需要备份最新的文件,但我不确定如何使用文件名永远不会相同。 我希望这有助于:) – Admaine

+0

@Admaine如果你只需要最新的文件,你可能想看看'forfiles'。示例如何删除所有超过10天的文件:'forfiles -p“C:\ backups”/ D -10/C“cmd/c del @path” – Regejok

+0

如果您只是想要最近的'n'文件,那么在'dir'命令中添加'/ od'命令,然后按照反向日期的顺序提供列表,如果你想限制到'n'文件被传输,在条目之前添加'if %% a leq n' '副本',以便副本仅在序列号小于或等于指定数量的情况下进行。然后你可能不需要改变文件名,所以你可以简单地从目标文件名中除去'filename %% a.txt',只留下目录名。 – Magoo

相关问题