У меня были проблемы с xcopy в последние несколько дней, и я бы хотел перестать рвать на себе волосы. В моем классе DOS часть назначения требует, чтобы файл был скопирован (с xcopy), и к новому имени файла должен быть добавлен .bak, сохраняя исходное расширение, но я не могу заставить его сделать это должным образом. Использование XCopy * * .bak, я ожидал бы , чтобы сделать это, но он заменяет расширение файла, вместо добавления. Мой друг из того же класса говорит, что это работает так, как должно для него, что я нахожу странным. Я также пробовал другие комбинации символов подстановки, предложенные в результатах поиска Google, но они дают мне те же результаты, и вот если я смогу найти что-нибудь еще, относящееся к этому.

Я хотел бы также расширить, я не прошу домашнюю помощь. Моя домашняя работа проста, но я не понимаю, почему xcopy дал бы мне такие результаты, когда та же команда работает для кого-то еще. Благодарю.

1 ответ1

0

в DOS (и командной строке Windows) маска для всех файлов - *.* Как в «файлы всегда имеют расширение, иногда это пустая строка». И имена файлов не могут заканчиваться .

Таким образом, маска * означать "файлы с пустым расширением". Но некоторые утилиты, в том числе xcopy, как вы обнаружили, автоматически расширяются * до *.* Потому что ... ну, я не ищу никакой логики, когда ее нет. Так что * в некоторых случаях является сокращением для *.*

Кроме того, xcopy, очевидно, слишком умный и заменяет расширение даже

xcopy *.* *.*.bak

чтобы добавить расширение .bak , используйте обычную copy с

copy * *.*.bak

(обратите внимание, что copy * *.bak все равно заменит расширение)

или, если вам нужно использовать xcopy, напишите for-loop.

FOR %%I IN (*.*) DO xcopy %%I "%%~I.bak"

(в интерактивной командной строке используйте одиночные знаки процента % вместо %%)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .