|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - как дождать завершения одного процесса для начала другого? |
|
CMD/BAT - как дождать завершения одного процесса для начала другого?
|
Пользователь Сообщения: 87 |
Профиль | Отправить PM | Цитировать Имеется папка с подпапками разного уровня вложений и файлы в них
Имеется батник (indexer.bat), который помещает в каждую папку список имен содержащихся в них файлов (index.txt): indexer.bat Цитата:
replace.bat: Цитата:
Как сделать так, чтобы replace.bat запускался только после того как indexer.bat завершит свою работу, а не начинал работать параллельно, рискуя пропустить те index.txt которые еще не успели создаться. Команда start /wait типа start.bat: start /wait indexer.bat start /wait replace.bat (или: call indexer.bat) мне не помогла - все равно начинают работу параллельно. |
|||
Отправлено: 13:56, 15-01-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:19, 15-01-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать ruslaw,Чтобы не плодить кучу батников, я бы использовал подпрограммы, например
@Echo Off Call :Indexer Call :Replace GoTo :Eof :Indexer chcp 1251 Set "BoxIn=E:\test" Set "LogExt=txt" Call :DirTxt "%BoxIn%" For /F "usebackq delims=" %%d In (`Dir "%BoxIn%" /b /A:D /S 2^>nul`) DO Call :DirTxt "%%d" chcp 866 GoTo :Eof :DirTxt rem:: заменяем %~nx1 на 1ndex и получаем индексный файл с названием index.html вместо html-файла названного именем папки Set "OutLog=index.%LogExt%" >"%~1\%OutLog%" (For /F "usebackq delims=" %%f In (`Dir "%~1" /b /A:-D-H 2^>nul`) DO If /I Not "%%f"=="%OutLog%" @Echo %%f chcp 866 GoTo :Eof :Replace cscript replace.vbs "E:\path-1\index.txt" "заменяемый текст1" "заменяющий текст1" rem ......... cscript replace.vbs "E:\path-N\index.txt" "заменяемый текстN" "заменяющий текстN" GoTo :Eof |
------- Отправлено: 14:31, 15-01-2018 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать ruslaw,
Вот еще вариант. Объединить все файлы (батники, WSH - скрипт) в один. Единственное, я наугад (подробно о её функционале не в курсе) переписал процедуру замены подстрок из VBS в JS.
@set @E=1; /* @Echo Off cls Call :Indexer Call :Replace pause GoTo :Eof :Indexer chcp 1251 Set "BoxIn=E:\test" Set "LogExt=txt" Call :DirTxt "%BoxIn%" For /F "usebackq delims=" %%d In (`Dir "%BoxIn%" /b /A:D /S 2^>nul`) DO Call :DirTxt "%%d" chcp 866 GoTo :Eof :DirTxt rem:: заменяем %~nx1 на 1ndex и получаем индексный файл с названием index.html вместо html-файла названного именем папки Set "OutLog=index.%LogExt%" >"%~1\%OutLog%" (For /F "usebackq delims=" %%f In (`Dir "%~1" /b /A:-D-H 2^>nul`) DO If /I Not "%%f"=="%OutLog%" @Echo %%f chcp 866 GoTo :Eof :Replace Cscript //NoLogo /E:jscript "%~dpnx0" "E:\path-1\index.txt" "заменяемый текст1" "заменяющий текст1" rem ............................. Cscript //NoLogo /E:jscript "%~dpnx0" "E:\path-N\index.txt" "заменяемый текстN" "заменяющий текстN" GoTo :Eof */ var oArg = WScript.Arguments; if (oArg.Count() != 3) { WScript.Echo("Error! Invalid number of arguments!"); WScript.Quit(240); } var FText=oArg(0); var str1=oArg(1); var str2=oArg(2); var FSO=WScript.CreateObject("Scripting.FileSystemObject"); var InFile; try {InFile = FSO.OpenTextFile(FText,1);} catch (e) { if (e !=0 ) { WScript.Echo("Error! " + FText + " " + e.description); WScript.Quit(240); } } var TextAll = InFile.ReadAll(); InFile.Close(); TextAll=TextAll.replace(new RegExp(oArg(1),'g'),oArg(2)); InFile = FSO.OpenTextFile(FText,2); InFile.Write(TextAll); InFile.Close(); |
------- Последний раз редактировалось megaloman, 15-01-2018 в 19:00. Отправлено: 16:30, 15-01-2018 | #4 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Iska, спасибо, учту совет, Ваш скрипт вполне работает.
megaloman, тоже очень признателен, скрипт работает на отлично, но у меня он заработал когда я удалил оба chcp 866 (самому странно). Все четко сформировал и заменил по всем позициям. |
|
Отправлено: 12:54, 16-01-2018 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать ruslaw,
Цитата ruslaw:
Цитата ruslaw:
|
||
------- Отправлено: 13:30, 16-01-2018 | #6 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Оба отработали.
Первый, содержащий ссылку на мой VBS-файл, и второй, с JScript. |
Отправлено: 12:00, 17-01-2018 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Завершение одного процесса и запуск другого с помощью bat-файла | irbis85 | Скриптовые языки администрирования Windows | 7 | 26-05-2015 19:19 | |
2003/XP/2000 - Как перенести письма Outlook с одного компа,в bat другого. | bornflyy | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 17-07-2012 17:47 | |
Почта - Как перенести письма Outlook с одного компа,в bat другого. | bornflyy | Программное обеспечение Windows | 0 | 17-07-2012 12:48 | |
.NET - Ожидание завершения процесса | Efsey | Программирование и базы данных | 11 | 24-11-2010 19:16 | |
C++ Builder->Определение времени, необходимого для завершения процесса | XCodeR | Программирование и базы данных | 6 | 18-01-2005 14:40 |
|