【问题标题】:Copy file type from sub directories, into one folder renaming files so they don't overwrite将子目录中的文件类型复制到一个文件夹中,重命名文件,这样它们就不会被覆盖
【发布时间】:2023-03-25 04:14:01
【问题描述】:

我想从子目录复制一种文件类型,将副本放在一个文件夹中,然后重命名它们,以免它们被覆盖。重命名它但保留文件扩展名。我不在乎它被重命名为什么,只要每个副本都有一个唯一的名称,这样它们就不会被覆盖。

这是我的代码。它会做我想做的一切,除了它会覆盖同名的文件:

代码:

set dSource=C:\Users\P Ditty\Documents\SH3\data\cfg\Careers
set dTarget=C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR
set fType=*.clg
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
copy  /v "%%f" "%dTarget%\" 2>nul
)

谢谢。

【问题讨论】:

  • 重命名到底是什么?如果你有一个文件 C:\Users\P Ditty\Documents\SH3\data\cfg\Careers\myfile.clg,你希望它在你的目的地是什么样子的?
  • 任何东西。只要它保留文件扩展名。所以数字甚至日期。只要他们不覆盖。所以每个文件都是独一无二的。

标签: batch-file batch-processing batch-rename


【解决方案1】:

通过保留原始目录结构来避免重复问题:

set dSource=C:\Users\P Ditty\Documents\SH3\data\cfg\Careers
set dTarget=C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR
set fType=*.clg

xcopy/s/i "%dSource%\%fType%" "%dTarget%"

【讨论】:

  • 那么如果创建日期相同,那么它们会覆盖吗?那有可能把它变成数字吗?
  • 您可以选择一个随机数并祈祷它不存在,但我建议坚持使用日期并使用更高的精度。从长远来看,它更容易。我已经更新了我的答案,包括精确到分钟......只要你每分钟运行它不超过一次,你会没事的:)
  • 他们复制的文件不是同一个子目录中的同一个文件,随着时间的推移发生变化。它们是不同子目录中具有相同文件名的不同文件。所以按分钟制作仍然会覆盖。
  • 我明白了,所以你原来的子目录里有骗子。有什么理由不希望备份文件夹包含与原始文件夹相同的目录结构?
  • 随机数可能最适合这种情况,因为被复制的具有相同文件名的文件不会超过 10 个文件。
猜你喜欢
  • 2021-10-25
  • 2012-11-04
  • 2012-12-14
  • 2016-03-19
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多