Пакетное переименование Windows в несколько периодов

539
user452056

Я просто пытаюсь скопировать файл типа X.TWO.THREE в DATE.X.TWO.THREE. X является константой, а дата будет добавлена ​​в будущем. А пока я использовал константу и для этого. Когда я пытаюсь переименовать файл, например:

xcopy C:\test\X.??????.?????? C:\test2\DATE.X.??????.?????? 

Я получаю сообщение об ошибке "Не удалось развернуть второе имя файла, чтобы оно соответствовало первому"

Любая идея о том, как сделать переименование с несколькими периодами в нем?

Спасибо.

0

2 ответа на вопрос

2
Karan

Однолинейная версия:

for %f in ("C:\Test\X.*") do copy "%~f" "C:\Test2\DATE.%~nxf" 
Я люблю такие ответы :) +1 Abraxas 9 лет назад 0
Не хватило голосов - просматривал главные вопросы и прочее ... Я пытался. Дайте несколько часов и я попробую еще раз =) Abraxas 9 лет назад 0
Возможно, было бы лучше с несколькими точками в маске файла: `... in (" c: \ test \ x. *. * ") Do ...` dbenham 9 лет назад 0
@dbenham: Спасибо, но можете ли вы объяснить, где x. * может потерпеть неудачу, а x. *. * успешно? Karan 9 лет назад 0
Извините, моя ошибка - `x. *` И `x. *. *` Дают точно такой же результат. Я собирался игнорировать файлы, в которых не было по крайней мере двух точек. Фактическое решение, ограничивающее обработку файлами с двумя или более точками, требует изменения на `for / f" eol =: delims = "% F in ('dir / b X. * ^ | Findstr / i" X \ .. * \ . "') делать ...` dbenham 9 лет назад 0
@dbenham: Попался. Да, конечно, findstr будет работать с подстановочными знаками или небольшим регулярным выражением, если это необходимо, если есть требование такого рода. Karan 9 лет назад 0
Там вы идете :) Abraxas 9 лет назад 0
0
td512

Это будет работать:

xcopy C:\test\X.??????.?????? C:\test2\ ren X.??????.?????? DATE.X.??????.?????? 

Сначала скопируйте, затем переименуйте