|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] работа с переменными |
|
CMD/BAT - [решено] работа с переменными
|
Пользователь Сообщения: 102 |
Добрый день!
помогите, пожалуйста. есть батник, но его теперь нужно изменить, а я не знаю как задать переменную... сейчас он такой rem @echo off ARJ32.exe m -e C:\testbat\2\AN03722%date:~8,2%%date:~3,2%%date:~0,2%0000 C:\testbat\1\s*_*_*_1*.txt ARJ32.exe m -e C:\testbat\2\BN03722%date:~8,2%%date:~3,2%%date:~0,2%0000 C:\testbat\1\s*_*_*_7*.txt 1. 0000 это порядковый номер файла за день, нужно что бы он их начал считать (думаю что необходимо сделать так, что бы он записывал этот номер в *.тхт и сверял при следующем выполнении) 2. в имени этих s*_*_*_1*.txt и s*_*_*_7*.txt файлов цифра "1" и цифра "7" могут меняться на "0;1;2;6." и "3;4;5;7." соответственно - необходимо что бы он перебирал эти цифры и паковал в архивы соответствующие заранее огромное спасибо! |
|
Отправлено: 09:02, 27-06-2014 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "Out=Q:\testbat\2" Set "In=Q:\testbat\1" Set "Dt=%date:~8,2%%date:~3,2%%date:~0,2%" SetLocal EnableExtensions EnableDelayedExpansion Call :Number "%Out%" "AN03722" "%In%" "0 1 2 6" Call :Number "%Out%" "BN03722" "%In%" "3 4 5 7" GoTo :Eof :Number Set "P_N=%~2" Set "M_N=%~1\%P_N%%Dt%" Set "Out_N=%P_N%%Dt%0000" FOR /F "usebackq delims=" %%i IN (`Dir /b /A:-D /O:-N "%M_N%????.*" 2^>Nul`) DO ( Set "Out_N=%%~ni" GoTo :Continue ) :Continue Set NN=1%Out_N:~-4% FOR %%N IN (%~4) DO ( If Exist "%~3\s*_*_*_%%N*.txt" ( Set /A NN=!NN!+1 Echo ARJ32.exe m -e "%M_N%!NN:~-4!" "%~3\s*_*_*_%%N*.txt" ) ) |
------- Последний раз редактировалось megaloman, 03-07-2014 в 22:37. Отправлено: 12:40, 27-06-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Огромное спасибо за помощь!!!
да, вы правы, команда "m" удаляет файлы после архивации батник шикарный, но есть пара "но" прошу прощения, я забыл уточнить, что архивы в папке не хранятся, следовательно он не сможет посмотреть номер последнего архива, по этому и предположил, что необходимо сделать лог работы за день. этот батник пакует файлы с разным значениями "0 1 2 6" в разные архивы, а необходимо упаковать в один (если возможно, если нет, то подойдет и так), ну и для "3 4 5 7" аналогично. ещё раз приношу извинения за неточность в написании просьбы... |
Отправлено: 05:19, 28-06-2014 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "Out=Q:\testbat\2" Set "In=Q:\testbat\1" Set "Dt=%date:~8,2%%date:~3,2%%date:~0,2%" Call :Number "%Out%" "AN03722" "%In%" "0 1 2 6" "Q:\testbat\2\AN_Log.log" Call :Number "%Out%" "BN03722" "%In%" "3 4 5 7" "Q:\testbat\2\BN_Log.log" GoTo :Eof :Number Set "P_N=%~2" Set "M_N=%~1\%P_N%%Dt%" Set "NN=10000" If Exist %5 FOR /F "usebackq tokens=1,2" %%i IN (%5) DO ( If %%i==%Dt% Set "NN=1%%j" ) Set /A NN=%NN%+1 Set "LL=0" FOR %%N IN (%~4) DO ( If Exist "%~3\s*_*_*_%%N*.txt" ( Echo ARJ32.exe m -e "%M_N%%NN:~-4%" "%~3\s*_*_*_%%N*.txt" Set "LL=1" ) ) If "%LL%"=="1" Echo %Dt% %NN:~-4%>%5 Для "боевого" использования уберите Echo перед arj. По видимому, надёжнее и проще сделать не а , но у меня нет ARJ чтобы отладить этот кусок, я даже не уверен, делает ли ARJ32 архив с расширением arj и пополняется ли архив с добавлением нового файла (как это у rar, например). |
------- Последний раз редактировалось megaloman, 03-07-2014 в 22:39. Причина: Уточнение кода Отправлено: 19:14, 28-06-2014 | #4 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Оба варианта прекрасно работают!
если вы говорите, что второй вариант лучше, буду использовать его! выражаю огромную благодарность!!! |
|
Отправлено: 22:35, 28-06-2014 | #5 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать пытаюсь переделать этот батник под подобную работу, но с другими именами файлов, но так как руки из попы, у меня нифига не получается
ткните, пожалуйста, носом, что я не так делаю... есть файлы PS*_2763_0020_N_*_2763_0020.xml отличаются только цифрой "N", для цифр "1 2 3 4 9" должен быть вид архива PSEI_2763_0020_GGGGMMDD_nnn, а для "5 6" - PSKR_2763_0020_GGGGMMDD_nnn.arj я подправил так, работает, но почему то не пишет лог и естественно не дает следующий № за день @Echo Off cls rem 311 Set "Out=C:\testbat\ps" Set "In=C:\testbat\ps" Set "Dt=%date:~6,4%%date:~3,2%%date:~0,2%" Call :Number "%Out%" "PSEI_2763_0020_" "%In%" "1 2 3 4 9" "C:\testbat\ps\PSEI_Log.log" Call :Number "%Out%" "PSKR_2763_0020_" "%In%" "5 6" "C:\testbat\ps\PSKR_Log.log" GoTo :Eof :Number Set "P_N=%~2" Set "M_N=%~1\%P_N%%Dt%" Set "NN=1000" If Exist %5 FOR /F "usebackq tokens=1,2" %%i IN (%5) DO ( If %%i==%Dt% Set "NN=1%%j" ) Set /A NN=%NN%+1 FOR %%N IN (%~4) DO ( If Exist %In%\PS*_*_*_%%N_*_*_*.xml ( ARJ32.exe m -e "%M_N%_%NN:~-3%.arj" "%~3\PS*_*_*_%%N_*_*_*.xml" ) ) If Exist "%M_N%%NN:~-3%.arj" Echo %Dt% %NN:~-3%>%5 ![]() а ещё, после него мне нужно запустить простейшую команду архивации оставшихся файлов, но она запускается параллельно, и захватывает файлы из прошлого списка, как сделать так, что бы следующая команда дождалась завершение прошлой операции? |
Последний раз редактировалось Anufriev, 01-07-2014 в 17:07. Отправлено: 14:22, 01-07-2014 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Попробуйте так:
@Echo Off Set "Out=Q:\testbat\ps" Set "Pre=PS*_2763_0020_" Set "End=_*_2763_0020.xml" Set "In=Q:\testbat\ps" Set "MaskOther=*.xml" Set "Dt=%date:~8,2%%date:~3,2%%date:~0,2%" Call :Number "%Out%" "PSEI_2763_0020_" "%In%" "1 2 3 4 9" "Q:\testbat\ps\PSEI_Log.log" Call :Number "%Out%" "PSKR_2763_0020_" "%In%" "5 6" "Q:\testbat\ps\PSKR_Log.log" Call :Number "%Out%" "Other_" "%In%" "" "Q:\testbat\ps\Other_Log.log" GoTo :Eof :Number Set "P_N=%~2" Set "M_N=%~1\%P_N%%Dt%" Set "NN=1000" If Exist %5 FOR /F "usebackq tokens=1,2" %%i IN (%5) DO ( If %%i==%Dt% Set "NN=1%%j" ) Set /A NN=%NN%+1 Set "LL=0" If Not %4=="" ( FOR %%N IN (%~4) DO ( If Exist "%~3\%Pre%%%N%End%" ( Echo ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%Pre%%%N%End%" Set "LL=1" ) ) ) Else ( If Exist "%~3\%MaskOther%" ( Echo ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%MaskOther%" Set "LL=1" ) ) If "%LL%"=="1" Echo %Dt% %NN:~-3%>%5 If Not %4=="" ( FOR %%N IN (%~4) DO ( If Exist "%~3\%Pre%%%N%End%" ( ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%Pre%%%N%End%" ) ) ) Else ( If Exist "%~3\%MaskOther%" ( ARJ32.exe m -e "%M_N%%NN:~-3%.arj" "%~3\%MaskOther%" ) ) If Exist "%M_N%%NN:~-3%.arj" Echo %Dt% %NN:~-3%>%5 Кстати, в предыдущей задаче правильнее вместо If Exist %In%\s*_*_*_%%N*.txt написать If Exist "%~3\s*_*_*_%%N*.txt" так как %In% передаётся %3 аргументом |
------- Последний раз редактировалось megaloman, 03-07-2014 в 22:52. Отправлено: 22:20, 03-07-2014 | #7 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:16, 04-07-2014 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
------- Отправлено: 11:31, 04-07-2014 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Работа с переменными в цикле | DarkDream604 | Скриптовые языки администрирования Windows | 5 | 03-03-2015 16:19 | |
Любой язык - [решено] Старт bata с переменными. | _Parkan_ | Скриптовые языки администрирования Windows | 2 | 11-01-2012 19:31 | |
CMD/BAT - затруднения в работе с переменными | cher | Скриптовые языки администрирования Windows | 3 | 23-06-2011 21:46 | |
проблема с переменными окружения | Vasosel | Microsoft Windows NT/2000/2003 | 2 | 12-07-2006 14:21 | |
PHP. Финты ушами с переменными и функциями. | Prisoner | Вебмастеру | 6 | 28-06-2005 10:51 |
|