Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скопировать в папку, зная только часть ее Имени

Ответить
Настройки темы
CMD/BAT - Скопировать в папку, зная только часть ее Имени

Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить 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

 

Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить 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
)
Пропишите свои пути. Убедитесь, что в эти папки есть доступ. У меня по умолчанию доступа к папке "C:\Documents and Settings" нет.


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-02-2017 в 23:17.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:47, 14-02-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Set "BoxOutEnd=Application Data\AIMP" »
спасибо

вопрос по коду , для чего нам 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


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


magarjoba, Не люблю копаться в чужом коде, но, похоже, мой кусок ни в чём не виноват.
От меня ускользает смысл, например, этой строки
echo a| xcopy "Музыка.lnk" "C:\Documents and Settings\All Users\Рабочий стол" /s /e

Для меня конструкция echo a| совершенно непонятна, но соль не в этом.
Цитата Читайте хелп по команде Xcopy /?:
/S Копирует все папки и подпапки, кроме пустых.
/E Копирует все папки и подпапки, включая пустые.
То же самое, что и /S /E. Можно использовать для изменения /T.
То есть, даже если файлов "Музыка.lnk" в подпапках нет, то в папку "C:\Documents and Settings\All Users\Рабочий стол" успешно копируется все подпапки той папки, которая является текущей для батника, даже без содержимого.
Что написали, то и получили.
Кроме того, ИМХО для копирования просто файлов в текущей папке лучше использовать команду Copy, а не Xcopy. Или в Xcopy не использовать ключи и /S и /E, они в этом случае вредны.
В остальные строки не вчитывался.

Кстати, и в моих примерах лучше ограничиться одним ключом: или /S или /E в зависимости от необходимости копирования пустых папок. Я оставил /E.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-02-2017 в 23:39.


Отправлено: 23:14, 14-02-2017 | #6


Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Для меня конструкция echo a| совершенно непонятна »
обьясню кратко :
использую на локальном компе 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


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


magarjoba, Рабочий стол расположен C:\Users\sh*\Desktop\ ???

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 10:10, 15-02-2017 | #8


Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Рабочий стол расположен C:\Users\sh*\Desktop\ »
да , расположен C:\Documents and Settings\sh*\Рабочий стол во всех случаях

desktop -не катит т.к. кто-то в свое время тупанул и на xp_sp3 вот так сделал образ с русскими путями

Отправлено: 10:48, 15-02-2017 | #9


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скопировать в папку, зная только часть ее Имени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход