|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скопировать в папку, зная только часть ее Имени |
|
CMD/BAT - Скопировать в папку, зная только часть ее Имени
|
Новый участник Сообщения: 32 |
Профиль | Отправить PM | Цитировать Всем привет , и снова обращаюсь за помощью гуру,
наподобие я в ветке одну тему нашел , но она не подходит у меня следущая ситуация ЕСТЬ диски M: и С: Необходимо c диска M:\temp\AIMP "вот эту папку AIMP" скопировать во все папки на диске С по заданному пути имя папок всегда будет начинаться sh C:\Documents and Settings\sh***\Application Data если в одной из этих папок она уже есть , то делаем полность замену как я это представляю путь диска M не прописую т.к. deploy.cmd файл лежит в корне M:\temp\ taskkill /F /T /IM AIMP.exe chcp 1251 >nul echo a| xcopy "AIMP" "C:\Documents and Settings\Default User\Application Data\AIMP\" /s /e echo a| xcopy "AIMP" "C:\Documents and Settings\All Users\Application Data\AIMP\" /s /e echo a| xcopy "AIMP" "C:\Documents and Settings\administrator\Application Data\AIMP\" /s /e echo a| xcopy "Музыка.lnk" "C:\Documents and Settings\All Users\Рабочий стол" /s /e ------------- а вот как сделать если будет C:\Documents and Settings\sh***\Application Data ?? |
|
Отправлено: 17:13, 14-02-2017 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать @Echo Off Set "BoxIn=Z:\temp\AIMP" Set "BoxOut=Z:\Documents and Settings\sh*" Set "BoxOutEnd=Application Data\AIMP" FOR /F "usebackq delims=" %%d IN (`Dir /b /s /a:d "%BoxOut%" 2^>nul`) DO ( If Not Exist "%%d\%BoxOutEnd%" Md "%%d\%BoxOutEnd%" xcopy /E /Y "%BoxIn%\*.*" "%%d\%BoxOutEnd%\" >nul ) Извините за наглость, что я влез, хотя я не гуру и никогда им не стану. “Я год не был в бане. Я старый. Меня девушки не любят“ |
------- Последний раз редактировалось megaloman, 14-02-2017 в 23:17. Отправлено: 18:47, 14-02-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
вопрос по коду , для чего нам BoxOutEnd ? и если в этом коде в первой строке Set "BoxIn=Z:\temp\AIMP" не прописывать полный путь, чтобы этот код работал не важно где просто получается если в данном случае я допустим имею на диске Z папку temp внутри которой батник + эта подпапка если вдруг корень меняется z:1\temp или m:\temp и т.д. код не работает т.к. жесткая ссылка... @Echo Off Set "BoxIn=AIMP" ------если не указывать путь и запускать так ?? Set "BoxOut=Z:\Documents and Settings\sh*" - тут понятно что путь не поменяется Set "BoxOutEnd=Application Data\AIMP" - вот я не понял зачем это FOR /F "usebackq delims=" %%d IN (`Dir /b /s /a:d "%BoxOut%" 2^>nul`) DO ( If Not Exist "%%d\%BoxOutEnd%" Md "%%d\%BoxOutEnd%" xcopy /s /e /y "%BoxIn%\*.*" "%%d\%BoxOutEnd%\" >nul ) Set "BoxOutEnd=Application Data\AIMP" это скорее всего именно замена т к я по "деревенски " делаю и соглашаюсь на перезапись вот этой командой echo a| xcopy с доп ключами вы сделали это другим способом . я прав!? |
|
Отправлено: 19:03, 14-02-2017 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать magarjoba, Не понял вопроса.
Вам надо организовать поиск папок C:\Documents and Settings\sh***\Application Data\Aimp Я не знаю, как это сделать: предупреждал ведь, что я не гуру. Поэтому ищу способ. Делю ваш путь на 2 части: C:\Documents and Settings\sh*** - это я могу перебрать командой Dir. Далее по полученному пути я достраиваю вторую часть C:\Documents and Settings\sh_конкретное + \Application Data\Aimp = C:\Documents and Settings\sh_конкретное\Application Data\Aimp Единственное, я поленился уточнить у Вас, обязательно ли в папке sh_конкретное должна существовать подпапка Application Data\Aimp Я наглым образом её создаю, если её нет. Если я не прав - это решаемо. Я предпочитаю, чтобы батник мог запускаться из любого места, поэтому жестко прописываю пути. Если батник в папке рядом с подпапкой AIMP, можно сделать так: @Echo Off Set "BoxIn=%~dp0AIMP" Set "BoxOut=Z:\Documents and Settings\sh*" Set "BoxOutEnd=Application Data\AIMP" FOR /F "usebackq delims=" %%d IN (`Dir /b /s /a:d "%BoxOut%" 2^>nul`) DO ( If Not Exist "%%d\%BoxOutEnd%" Md "%%d\%BoxOutEnd%" xcopy /E /Y "%BoxIn%\*.*" "%%d\%BoxOutEnd%\" >nul ) Кстати, не уточнил, что Вы имели ввиду "делаем полностью замену" - может перед копированием надо вычистить всё в папке C:\Documents and Settings\sh_конкретное\Application Data\Aimp если она ранее была? А за перезапись без вопросов отвечает ключ /Y в Xcopy |
------- Последний раз редактировалось megaloman, 14-02-2017 в 23:16. Отправлено: 19:40, 14-02-2017 | #4 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать чтоб вы понимали правильно
это разливалка профиля аимп на подсеть компов для определенных юзеров т.е. вычищать папку необязательно, а просто копирование папки с полностью заменой содержимого вот смотри скину тебе полностью код как я все проделываю Скрытый текст
@echo "unistall install program" @echo "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" @echo "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" @echo "\\\\\\\\\\\\\START\\\\\\\\\\\\\\\\\" @echo "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" @echo " " @echo off taskkill /F /T /IM winamp.exe taskkill /F /T /IM AIMP.exe @echo "\\\\\\\\\0_inst_aimp\\\\\\\\\\\\\\\" aimp_4.02.1725.exe /SILENT /AUTO /REG=R @echo off chcp 1251 >nul Set "BoxIn=M:\tempfrommusic_install\AIMP" Set "BoxOut=C:\Documents and Settings\sh*" Set "BoxOutEnd=Application Data\AIMP" FOR /F "usebackq delims=" %%d IN (`Dir /b /s /a:d "%BoxOut%" 2^>nul`) DO ( If Not Exist "%%d\%BoxOutEnd%" Md "%%d\%BoxOutEnd%" xcopy /s /e /y "%BoxIn%\*.*" "%%d\%BoxOutEnd%\" >nul ) echo a| xcopy "AIMP" "C:\Documents and Settings\Default User\Application Data\AIMP\" /s /e echo a| xcopy "AIMP" "C:\Documents and Settings\administrator\Application Data\AIMP\" /s /e echo a| xcopy "Музыка.lnk" "C:\Documents and Settings\All Users\Рабочий стол" /s /e @echo "\\\\\`````\\\\NEXT\\\\\`````\\\\\\\" @echo "\\\\\\\\\\0_cwRsync\\\\\\\\\\\\\\\\" @echo off echo a| xcopy "cwRsync" "c:\Program Files\cwRsync\" /s /e REM ---------------Права для папок CACLS c:\Progra~1\cwRsync /E /T /C /G "Все":F REM ---------------Изменяем запись крона @Echo Off Set tabfile=c:\Progra~1\cron\cron.tab (Echo #CRONTAB FILE Echo # Classic crontab format: Echo # Minutes Hours Days Months WeekDays Command Echo # Echo ########################################################## Echo ### Echo ### Музыка Echo ### Echo ########################################################## Echo # Echo @01 00-02 * * * "C:\Program Files\cwRsync\cwrsync.cmd" Echo @01 08-18 * * * "C:\Program Files\cwRsync\cwrsync.cmd" Echo # Echo 13 */1 * * * net time \\10.100.0.1 /Y /SET )>"%tabfile%" Я протестил первоначальный код он работает но на рабочий стол какого-то копирует папку AIMP и cwRsync а именно он копирует в C:\Documents and Settings\All Users\Рабочий стол эти папки после чего они появляются и из под админа, т.к. я на нем запускаю cmd-шник |
|
Отправлено: 21:33, 14-02-2017 | #5 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать magarjoba, Не люблю копаться в чужом коде, но, похоже, мой кусок ни в чём не виноват.
От меня ускользает смысл, например, этой строки echo a| xcopy "Музыка.lnk" "C:\Documents and Settings\All Users\Рабочий стол" /s /e Для меня конструкция echo a| совершенно непонятна, но соль не в этом. Цитата Читайте хелп по команде Xcopy /?:
Что написали, то и получили. Кроме того, ИМХО для копирования просто файлов в текущей папке лучше использовать команду Copy, а не Xcopy. Или в Xcopy не использовать ключи и /S и /E, они в этом случае вредны. В остальные строки не вчитывался. Кстати, и в моих примерах лучше ограничиться одним ключом: или /S или /E в зависимости от необходимости копирования пустых папок. Я оставил /E. |
|
------- Последний раз редактировалось megaloman, 14-02-2017 в 23:39. Отправлено: 23:14, 14-02-2017 | #6 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
использую на локальном компе PxExec как видно из скриншота 1 запускаю install**** 2 install копирует файл program** на компы которые я указал в comp.txt 3 на удаленном компе распаковывается скачанный архив temp*** в указанную директорию 4 после чего выполняется сам батник файл музыка.lnk находится как видишь в папке позле того как её разархивировали и так. как я в PxExec через ключ W указал рабочубю папку на удаленных компах то батник понимает что эти файлы лежат в той же папке где он находится echo a| xcopy - я таким образом эмулирую соглашение на замену всех файлов если будут совпадения типо a - это "all" теперь я понял, что ключи именно для него не надо ------------------ подскажи могу ли я как-то замодить твою версию, чтоб этот гребанный ярлык копировался только на рабочий стол в профиля sh*** ? |
|
Отправлено: 01:16, 15-02-2017 | #7 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать magarjoba, Рабочий стол расположен C:\Users\sh*\Desktop\ ???
|
------- Отправлено: 10:10, 15-02-2017 | #8 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
desktop -не катит т.к. кто-то в свое время тупанул и на xp_sp3 вот так сделал образ с русскими путями |
|
Отправлено: 10:48, 15-02-2017 | #9 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать @Echo Off chcp 1251 >nul Set "BoxIn=%~dp0" rem Set "BoxIn=C:\temp" Set "Prof=sh*" Set "DS=C:\Documents and Settings" Set "DSAimp=Application Data\AIMP" rem Set "US=C:\Users" rem Set "USdesk=Desktop" Set "US=C:\Documents and Settings" Set "USdesk=Рабочий стол" Call :Profile "xcopy /E /H /Y" "%BoxIn%\AIMP\*.*" "%DS%\%Prof%" "%DSAimp%" 1 Call :Profile "xcopy /H /Y" "%BoxIn%\Музыка.lnk" "%US%\%Prof%" "%USdesk%" GoTo :Eof :Profile FOR /F "usebackq delims=" %%d IN (`Dir /b /s /a:d %3 2^>nul`) DO ( If Not "%5"=="" If Not Exist "%%d\%~4" Md "%%d\%~4" %~1 %2 "%%d\%~4\" >nul 2>nul ) GoTo :Eof |
------- Отправлено: 11:12, 15-02-2017 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Создать папку, с именем введенным пользователем и скопировать туда первую папку | Vaserson | Скриптовые языки администрирования Windows | 0 | 18-03-2016 15:54 | |
Разное - Как мне восстановить часть информации и извлечь ее? | dionisiyzuykov | Microsoft Windows 7 | 3 | 27-06-2015 16:46 | |
CMD/BAT - Заархивировать папку через БАт, но только ее содержимое,а не саму папку. | iphone1337 | Скриптовые языки администрирования Windows | 2 | 02-11-2014 12:28 | |
CMD/BAT - записать в txt файл только часть имени файла. | Spacejet | Скриптовые языки администрирования Windows | 2 | 20-10-2014 18:18 | |
CMD/BAT - Определение имени папки и ее скачивание по FTP | volk1234 | Скриптовые языки администрирования Windows | 1 | 10-06-2011 16:19 |
|