|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт FOR и DIR |
|
|
CMD/BAT - Скрипт FOR и DIR
|
Новый участник Сообщения: 16 |
Уважаемые, не могу понять... почему не срабатывает....
Предистория: На локальном сервере есть папка с подкаталогами различных бэкапов. Необходимо на удаленном компе создавать папку с текущей датой и тупо туда скопировать ПОСЛЕДНИЕ СОЗДАННЫЕ бэкапы из подкаталогов. Когда делаю эту процедуру в контретном подкаталоге, т.е указываю *.bak - всё супер гут. Но как только поднимаюсь на уровень выше и начинаю делать перебор по подкаталогам %%B\*.bak ... всё, мандец, приехал... ![]() @echo off cls set sFolderName=%date:~6,4%-%date:~3,2%.%date:~0,2% mkdir \\COMP1\d$\Backup_1c\"%sFolderName::=-%" set work_dir=d:\Backup for /d %%B in (%work_dir%\*) do ( echo %%B for /f %%v in ('dir %%B\*.bak /b /T:A /A:-D /O:-D') do >nul copy %%~fv \\COMP1\d$\Backup_1c\"%sFolderName::=-%" &exit ) pause Подпапка или файл \\COMP1\d$\Backup_1c\2016-09.22 уже существует. d:\Backup\clients Файл не найден d:\Backup\diskont Файл не найден d:\Backup\kompl_nef Файл не найден d:\Backup\torg_nef Файл не найден d:\Backup\torg_pil Файл не найден d:\Backup\zakaz Файл не найден d:\Backup\zup_pil_82 Файл не найден Для продолжения нажмите любую клавишу . . . такое ощущение что при использовании команды DIR сразу теряется смысл команды for in() Что не так? |
|
Отправлено: 18:39, 22-09-2016 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "sFolderName=\\COMP1\d$\Backup_1c\%date:~6,4%-%date:~3,2%.%date:~0,2%" Set "work_dir=D:\Backup" MD "%sFolderName%" 2>nul for /d %%B in ("%work_dir%\*") Do Call :BakCopy "%%B\*.bak" pause GoTo :Eof :BakCopy FOR /F "usebackq delims=" %%v in (`dir %1 /b /T:A /A:-D /O:-D 2^>nul`) Do ( Echo copy "%~dp1%%v" "%sFolderName%\" >nul copy "%~dp1%%v" "%sFolderName%\" &GoTo :Eof ) GoTo :Eof Что не так?
1. Например, exit вызывает не только выход из цикла, но и завершение батника. Из-за этого обрабатывается только первая выданная командой Dir папка. Читаем хелп по команде Exit /?
2. Не понимаю, зачем нужно "%sFolderName::=-%" |
------- Последний раз редактировалось megaloman, 22-09-2016 в 22:48. Отправлено: 22:20, 22-09-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать iskurt,
Цитата iskurt:
|
|
------- Отправлено: 09:16, 23-09-2016 | #3 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
Отправлено: 09:27, 23-09-2016 | #4 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать с созданием папки по дате всё пучком, папка создается, и в нее все прекрасно копируется, если я батник кидаю в папку где лежат бэкапы от одной базы. А если в общий каталог, то пипец.... не видит он файлов в подкаталогах.
Опять так, может FOR в связки с DIR не хочет работать с подкаталогами? Или как правильно указать путь? Цитата:
|
|||
Отправлено: 09:46, 23-09-2016 | #5 |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать iskurt,
в твоем логе я не увидел результатов отработки вот этого куска кода: Цитата megaloman:
![]() Этот кусок важен для отладки |
|
------- Отправлено: 10:35, 23-09-2016 | #6 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать сто пудофф ничего не переделывал.... ИДИОТ я..... имя то компа COMP1 - это же выдуманное ;-)
Спасибо, дружищщеее....y--, megaloman, !!! |
Отправлено: 11:05, 23-09-2016 | #7 |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать iskurt,
и все-таки с переделанной датой(для независимости от национальных настроек): @ECHO OFF :: Указание пути для обработки SET "WORK_DIR=d:\Backup" :: Указание пути для хранения SET "BACKUP_DIR=\\COMP1\d$\Backup_1c" ::Представление даты в нужном нам виде ECHO wscript.ECHO YEAR(DATE) ^& "_" ^& RIGHT(0 ^& MONTH(DATE),2) ^& "." ^& RIGHT(0 ^& DAY(DATE),2)>"%TEMP%\tmp.vbs" FOR /F %%i IN ('cscript "%TEMP%\tmp.vbs" //Nologo') DO SET "BACKUP_DIR=%BACKUP_DIR%\%%i" IF EXIST "%TEMP%\tmp.vbs" DEL "%TEMP%\tmp.vbs" ECHO Папка текущего дня "%BACKUP_DIR%" IF NOT EXIST "%BACKUP_DIR%" MD "%BACKUP_DIR%" IF NOT EXIST "%BACKUP_DIR%" (ECHO Не удалось создать папку текущего дня&EXIT 1) FOR /d %%a IN ("%work_dir%\*") DO ( ECHO Папка для обработки "%%~a" CALL :BakCopy "%%~a" ) GOTO :EOF :BakCopy FOR /F "usebackq delims=" %%b in (`DIR "%~1" /B /T:A /A:-D /O:-D`) DO ( ECHO COPY "%%~fb" "%BACKUP_DIR%" &GOTO :EOF ) GOTO :EOF |
------- Отправлено: 11:25, 23-09-2016 | #8 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Это уже классная модификация - унифицированная.... Респект!
|
Отправлено: 12:03, 23-09-2016 | #9 |
Старожил Сообщения: 231
|
Профиль | Отправить PM | Цитировать iskurt,
Я правильно понимаю что у тебя речь идет об SQL-ных бэкапах? Если так то этот скрипт тебе не нужен ![]() SQL бэкап можно делать на UNC-путь. При этом надо учесть только один нюанс: разрешение на запись должны быть для учетки от имени которой запущена служба "Агент SQL Server" (в случае когда делаешь через план обслуживания). Лучше всего создать специальную учетку для запуска SQL-ных служб, а если все-таки пускаешь от имени "Local System" то разрешение надо давать для учетной записи компьютера(в общей ситуации это возможно только в домене). При такой ситуации очень удобно строить структуру хранения резервных копий с автоматическим управлением количества хранимых копий в зависимости от типа копии(например: дневных - 6, недельных - 5, месячных - 13, годовых - 50). |
------- Отправлено: 14:38, 23-09-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
D-Link - D-Link DIR-100+DIR-300 соединить чтоб работала вафля | Zohon | Сетевое оборудование | 1 | 11-04-2013 21:10 | |
D-Link - D-Link Dir-100 и Dir 300 | maestro10 | Сетевое оборудование | 1 | 11-10-2011 15:09 | |
D-Link - dir-300 NRUB5 + dir-320 "От Олега" | korsh | Сетевое оборудование | 10 | 08-10-2011 18:56 | |
Router - Помогите определится с роутером <Dir-320, Dir-400> | cezar | Сетевое оборудование | 0 | 22-09-2010 15:05 | |
Wireless - Соединение двух Маршрутизаторов Wi-Fi <D-Link DIR-300 и DIR-320> | Limp-IP | Сетевое оборудование | 8 | 04-08-2010 17:58 |
|