Копирование нескольких подпапок в новое место с тем же макетом (XP DOS)

Хорошо, все здесь, в stackoverflow

Я часто посещал этот сайт и всегда находил то, что искал. К сожалению, я думаю, что я немного запутался в этом вопросе. Итак, я создал учетную запись, и, надеюсь, вы, ребята, либо скажете мне, что это возможно и как, либо скажите, что я сумасшедший, и я буду двигаться дальше. знак равно

Итак, вот что я хочу сделать: у меня есть старый компьютер с несколькими пользователями, которые входят в него. Теперь у меня есть новый компьютер, и я хотел скопировать элементы рабочего стола и избранные элементы пользователей на удаленный сервер, чтобы я мог скопировать их обратно после настройки нового компьютера. Текущая система - XP, а новая будет win7.

Я хочу завершить это, используя команды DOS в пакетном файле. У меня есть некоторый опыт программирования, но я сталкиваюсь с ошибками, а CMD.exe не самая лучшая среда программирования для устранения неполадок. Это то, что у меня есть до сих пор,

 FOR /R "C:\Documents and Settings\" %%G in (.) DO (
  Pushd %%G
  FOR /f %%D in (%%G\Desktop) do (
   if exist %%D\*.* COPY 
   %%D\*.* "D:Users\%%G\Desktop")
  FOR /f %%F in (%%G\Favorites) do (
   if exist %%F\*.* COPY 
   %%F\*.* "D:Users\%%G\Favorites")
 Popd )

Я надеялся, что приведенный выше код будет проходить через каждую папку пользователей (найденную в документах и ​​настройках) и копировать подпапки «Рабочий стол» и «Избранное» на удаленный сервер с тем же макетом. Прямо сейчас я получаю сообщения о том, что система не может найти файлы. Однако, просто заменив 2 цикла for на эхо-команды, он скажет мне, что правильно прошел через каждую пользовательскую подпапку. Затем каждый цикл for будет копировать данные из одной папки в другую. Но когда я пытаюсь объединить их, это не удается.

Если есть более простой способ скопировать 2 подпапки из каждой пользовательской папки в новое место и сохранить их как подпапки каждой пользовательской папки, у меня нет причин, чтобы это нужно было делать в пакетном файле. У меня просто нет времени вручную просматривать каждую папку. Скопируйте рабочий стол и избранное, переместите на удаленный сервер, создайте папку пользователя, вставьте рабочий стол и избранное и повторите для более чем 20 пользователей. Некоторые пользователи намного крупнее других, и их перемещение вручную может занять несколько часов.

Это был мой первый пост здесь, надеюсь, он был краток и понятен.

Заранее всем спасибо, я уже получил так много помощи от этого сайта до того, как у меня появился этот аккаунт.


person BlazzedTroll    schedule 03.05.2013    source источник
comment
D:Users? Это просто ошибка, которую вы допустили, когда печатали здесь, или это связано с самим скриптом?   -  person user2033427    schedule 03.05.2013
comment
Просто ошибка при вводе здесь. Я проверил свои скрипты на наличие ошибок типов.   -  person BlazzedTroll    schedule 03.05.2013


Ответы (1)


FOR /R "C:\Documents and Settings\" %%G in (.) DO ( будет перебирать каждую папку (и подпапки) в "C:\Documents and Settings\", но этот сценарий затем будет рассматривать каждую отдельную подпапку как папку пользователя и пытаться скопировать из нее рабочий стол и избранное, что, вероятно, не то, что вам нужно. Два цикла for в коде также на самом деле не нужны.

В следующем коде используется for /d. copy не очень хороший инструмент для использования, поскольку он не копирует папки, и следует использовать другие утилиты. Таким образом, этот код копирует только файлы, которые находятся в основной папке, а не во вложенных папках.

 for /d %%G in ("C:\Documents and Settings\") do (
  if exist %%G\Desktop\*.* (
   copy %%G\Desktop\*.* "D:\Users\%%~nxG\Desktop"))
  if exist %%G\Favorites\*.* (
   copy %%G\Favorites\*.* "D:\Users\%%~nxG\Favorites"))
 )

Поскольку %%G содержит абсолютный путь, %%~nxG должен получить только имя и расширение папки (на всякий случай, если в имени есть символ .), чтобы "D:\Users\%%~nxG\Desktop" работало. pushd и popd также не нужны, так как %%G содержит абсолютный путь в этом коде.

person user2033427    schedule 03.05.2013
comment
Предположительно, на рабочем столе есть папки, поэтому xcopy или лучше Robocopy подойдет для зеркалирования рабочего стола и т. д. - person foxidrive; 03.05.2013
comment
Я не могу проголосовать за ваш комментарий user2033427, но спасибо! Я искал что-то вроде %%~nxG, потому что знал, что %%G читает только первую строку, а имена некоторых папок имеют расширение . или несколько пробелов. Я вижу, что большая часть кода, который у меня был, не нужна, но я не вижу кода, который нужен. Поэтому я воспользуюсь вашим ответом вместе с предложением foxidrive и посмотрю, что я могу придумать. - person BlazzedTroll; 03.05.2013
comment
Так как я сейчас на XP, надежная копия файла пока не работает. Но xcopy кажется лучшим для этого сценария. использование xcopy с параметром /EXCLUDE может изменить это на одну строку. Все, что мне нужно сделать, это исключить папки, такие как [Мои документы] [Локальные настройки] и т. Д. и он сделает копию всего каталога, где бы я ни указал. Я даже могу использовать параметр /Z, так как я буду копировать на удаленный сервер, чтобы гарантировать, что никакие временные отключения не завершат процедуру копирования. Спасибо всем за вашу помощь. должен был более глубоко изучить xcopy. Я никогда не знал, что это было /Exclude - person BlazzedTroll; 03.05.2013
comment
Вы все еще должны быть в состоянии пометить его как принятый :) Я был слишком сонным прошлой ночью, но я думал о цикле for /d /r, который найдет все папки и подпапки, затем создаст соответствующий каталог на другом диске, а затем скопирует файлы покончил с copy. - person user2033427; 04.05.2013