Скопируйте тип файла из подкаталогов в одну папку, переименовав файлы, чтобы они не перезаписывались.

Я хотел бы скопировать один тип файла из подкаталогов, поместив копии в одну папку, переименовав их, чтобы они не перезаписывались. Переименуйте его, но сохраните расширение файла. Меня не волнует, как он переименован, если каждая копия имеет уникальное имя, чтобы они не перезаписывались.

Вот мой код сейчас. Он делает все, что мне нужно, за исключением того, что перезаписывает файлы с тем же именем:

Код:

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
)

Спасибо.


person machiavelli    schedule 22.02.2013    source источник
comment
переименовать во что именно? Если бы у вас был файл C:\Users\P Ditty\Documents\SH3\data\cfg\Careers\myfile.clg, как бы вы хотели, чтобы он выглядел в месте назначения?   -  person ty733420    schedule 23.02.2013
comment
Что-нибудь. Пока он сохраняет расширение файла. Так по цифрам или даже по дате. Пока они тоже не перезаписываются. Так что каждый файл уникален.   -  person machiavelli    schedule 23.02.2013


Ответы (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%"
person ty733420    schedule 22.02.2013
comment
Так если даты создания совпадают, то перезапишутся? Можно ли сделать его числовым тогда? - person machiavelli; 23.02.2013
comment
Вы можете выбрать случайное число и молиться, чтобы его еще не было, но я бы посоветовал придерживаться дат и просто использовать большую точность. Делает это проще в долгосрочной перспективе. Я обновил свой ответ, включив в него точность до минуты... если вы не запускаете его чаще одного раза в минуту, все будет в порядке :) - person ty733420; 23.02.2013
comment
Файлы, которые они копируют, не являются одним и тем же файлом в одном и том же подкаталоге, который изменяется с течением времени. Это разные файлы в разных подкаталогах с одинаковым именем файла. Так что делать это поминутно все еще перезаписывает. - person machiavelli; 23.02.2013
comment
Я вижу, так что в ваших исходных подкаталогах есть дубликаты. По какой причине вы не хотите, чтобы папка резервной копии содержала ту же структуру каталогов, что и исходная? - person ty733420; 23.02.2013
comment
случайный номер может быть лучшим для этого случая, потому что файлы с тем же именем, которые копируются, не будут иметь более 10 файлов. - person machiavelli; 23.02.2013
comment
Можно сделать такую ​​же структуру, тоже будет работать. Может быть проще. Я думаю, что могу сделать это самостоятельно. 1 сек. - person machiavelli; 23.02.2013
comment
Работающий. Спасибо! Я об этом не подумал!. - person machiavelli; 23.02.2013
comment
Теперь мне просто нужно понять это, и я готов!: stackoverflow.com/questions/15033351/ - person machiavelli; 23.02.2013
comment
не могли бы вы сделать случайное число? - person machiavelli; 23.02.2013
comment
Я не могу работать с подкаталогами, потому что не могу получить этот код для поиска в подкаталогах: findstr /s /c:ClassName=!ln:~6! C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg ›C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR\null && - person machiavelli; 23.02.2013
comment
*.clg ищет только в этой папке, а не в подкаталогах этой папки. Таким образом, метод случайных чисел был бы лучшим. - person machiavelli; 23.02.2013