Пакетный скрипт - пропустить на errorLevel в цикле -- batch-file поле с участием for-loop поле с участием errorlevel пол Связанный проблема

Batch Script - Skip on errorlevel in a For loop


2
vote

проблема

русский

Я пытаюсь иметь этот скрипт перейти к следующей части, если уровень ошибки a ping на компьютере не равен 0, но я не могу получить его на работу. Вывод говорит, что синтаксис не правильный. Спасибо.

 <код> @echo setlocal EnableDelayedExpansion  for /f %%a in (main.txt)  do (  ping -n 1 %%a > NUL IF %ERRORLEVEL%==0 (GOTO :COPY) ELSE GOTO :SKIP  :COPY ROBOCOPY C:Blah C:Bloh ECHO FILE COPIED  :SKIP  ECHO FILE NOT COPIED  )   
Английский оригинал

I am trying to have this script go to the next part if the error level of a ping to a computer does not equal 0, but I cannot get it to work. The output says the syntax is not correct. Thank you.

@echo setlocal EnableDelayedExpansion  for /f %%a in (main.txt)  do (  ping -n 1 %%a > NUL IF %ERRORLEVEL%==0 (GOTO :COPY) ELSE GOTO :SKIP  :COPY ROBOCOPY C:Blah C:Bloh ECHO FILE COPIED  :SKIP  ECHO FILE NOT COPIED  ) 
</div
        

Список ответов

2
 
vote
vote
Лучший ответ
 

Вы должны попробовать это:

 <код> @echo setlocal EnableDelayedExpansion  for /f %%a in (main.txt) do (    ping -n 1 %%a >NUL   IF "!ERRORLEVEL!"=="0" (     ROBOCOPY "C:Blah" "C:Bloh"     ECHO FILE COPIED   ) ELSE (     ECHO FILE NOT COPIED   ) ) PAUSE   
<Р> Есть несколько вещей неправильно с вашим кодом. Прежде всего, вы включите Отложенная расширение, но на самом деле не использовать его, только переменные внутри <код> ! получить расширенный замедленные. Я также поставить кавычки вокруг путей файлов, чтобы защитить их от путей с пробелами и прочим. Наконец, <код> goto и ярлыки не работают внутри <код> for петли, так что вам нужно, чтобы заменить их <код> if else логика
 

You should try this:

@echo setlocal EnableDelayedExpansion  for /f %%a in (main.txt) do (    ping -n 1 %%a >NUL   IF "!ERRORLEVEL!"=="0" (     ROBOCOPY "C:Blah" "C:Bloh"     ECHO FILE COPIED   ) ELSE (     ECHO FILE NOT COPIED   ) ) PAUSE 

There are a couple of things wrong with your code. First of all, you enable Delayed Expansion, but don't actually use it, only variables inside ! get expanded delayed. I also put quotes around your filepaths, to protect them against paths with spaces and stuff. Finally, goto and labels don't work inside for loops, so you need to replace them with if else logic

</div
 
 
 
 
0
 
vote
<Р> <код> goto :Label внутри в скобки блок кода, как <код> for петли перерывы контекст блока / цикл, так что код в метке выполняется как если бы оно было за пределами блока /петля. Поэтому вы должны работать вокруг этого.

Деннис ван GILS указывает на способ, как это сделать - с помощью <код> if / <код > else логика (его метод, а также следующий фрагмент слегка модифицированной (применяя числовое сравнение) оба требуют задержка расширения ):

 <код> setlocal EnableDelayedExpansion for "usebackq" /F %%A in ("main.txt") do (     > nul ping -n 1 %%A     if !ErrorLevel! EQU 0 (         robocopy "C:Blah" "C:Bloh"         echo FILE COPIED     ) else (         echo FILE NOT COPIED     ) ) endlocal   
<Р> Или как это, избегая необходимости замедленным расширения :

 <код> !0  

<Р> Чтобы проверить <код> !1 против (не) нулю, вы можете также использовать <код> !2 и <код> !3 операторов :
 <код> !4  

<Р> Наконец, если вы хотите сохранить <код> !5 структуры необходимо использовать подпрограмму для того, чтобы переместить эту часть кода внешней части <код> !6 блок (вы также не нужно замедленное расширение здесь):
 <код> !7  
 

goto :Label inside a parenthesised block of code like for loops breaks the block/loop context, so the code at the label is executed as if it were outside of the block/loop. Therefore you need to work around that.


Dennis van Gils points out a way how to do it -- using if/else logic (his method as well as the following slightly modified snippet (applying numeric comparison) both require delayed expansion):

setlocal EnableDelayedExpansion for "usebackq" /F %%A in ("main.txt") do (     > nul ping -n 1 %%A     if !ErrorLevel! EQU 0 (         robocopy "C:Blah" "C:Bloh"         echo FILE COPIED     ) else (         echo FILE NOT COPIED     ) ) endlocal 

Or like this, avoiding the necessity of delayed expansion:

for "usebackq" /F %%A in ("main.txt") do (     > nul ping -n 1 %%A     if ErrorLevel 1 (         echo FILE NOT COPIED     ) else (         robocopy "C:Blah" "C:Bloh"         echo FILE COPIED     ) ) 

To check the ErrorLevel against (non-)zero, you can also use the && and || operators:

for "usebackq" /F %%A in ("main.txt") do (     > nul ping -n 1 %%A || (         echo FILE NOT COPIED     ) && (         robocopy "C:Blah" "C:Bloh"         echo FILE COPIED     ) ) 

Finally, if you do want to keep the goto :Label structure, you need to use a sub-routine in order to move this part of the code outside of the () block (you also do not need delayed expansion here):

for "usebackq" /F %%A in ("main.txt") do (     > nul ping -n 1 %%A     call :SUB "C:Blah" "C:Bloh" ) exit /B  :SUB if %ErrorLevel% NEQ 0 goto :SKIP robocopy "%~1" "%~2" echo FILE COPIED :SKIP goto :EOF 
</div
 
 

Связанный проблема

5  Как сделать пакетный файл, который обнаруживает, когда программа закрывается, а затем перезагружает приложение?  ( How to make a batch file that detects when a program closes and then restarts th ) 
Есть ли способ, которым я могу сделать программу вновь открыть себя, когда она закрывается? У меня есть эта программа, которая работает; И это становится вс...

2  Консоль Windows выводится из неразборчива WAIFU2X-Caffe  ( Windows console output from waifu2x caffe unintelligible ) 
Я использую WAIF2X, чтобы выработать серию изображений, но у меня проблема с командой, которую я бегу. Я бы попытался устранить неполадки сами, но я не могу и...

100  Как мне захватить вывод скрипта, если он работает планировщиком задач?  ( How do i capture the output of a script if it is being ran by the task scheduler ) 
Использование Windows Server 2008, как мне перейти к захвату вывода скрипта, который работает с планировщиком задач Windows? Я проверяю довольно длинный пол...

9  Пакетные файлы. Если заявления?  ( Batch files if statements ) 
У меня есть пакетный файл, который необходимо применить команду attr + h в файл, затем выводим в файл TXT и отображение содержимого на экране. Это также должн...

0  Используйте переменную петли для вызова заранее определенной переменной  ( Use a for loop variable to call a predefined variable ) 
Я ищу использовать переменную, которая определяется внутри цикла и использовать его для вызова заранее определенной переменной. Например: для запуска програ...

1  Если состояние внутри для петли в партии  ( If condition inside for loop in batch ) 
Обратитесь к Проверьте «Если» состояние внутри для цикла (пакет / cmd) Моя партия <код> for /f "delims=" %%x in ('findstr /c:"B1" text.txt') do ( if...

3  Пакетный файл для копирования файла, если файл существует файл переименования с Timestamp  ( Batch file to copy file if file exists rename file with timestamp ) 
У меня есть пакетный файл, который копирует файл из сети к локальному, и если файл существует, добавляет временную метку. На самом деле я переименовая файл сн...

17  Как проверить, содержит ли текстовый файл определенный текст в партии?  ( How to check if text file contain certain text in batch ) 
У меня есть текстовый файл в одной папке, что и где мой пакетный файл. Так что я хочу, чтобы мой пакетный файл читал содержимое текстового файла и в зависи...

46  Как запустить пакетный скрипт (.bat file) из Eclipse  ( How to run a batch script bat file from eclipse ) 
Мое приложение Java запускается с помощью набора команд, которые присутствуют в пакетном файле (файл .bat). И я импортировал это на Workbench Eclipse. Как я м...

0  Как написать пакет, которая копирует сам?  ( How do i write a batch that is copying itselfe ) 
Я хотел бы написать пакетный файл, который читает свой собственный код внутри строки, затем создает новый файл пакет со строкой в ​​качестве контента и выполн...

1  Вызов sqlcmd.exe в пакетном файле с использованием переменных вызывает ошибку: «Неожиданный аргумент»  ( Calling sqlcmd exe in batch file using variables causes error unexpected argum ) 
в файле пакет Windows, это работает: <код> Banana6 Как это делает: <код> Banana7 Но это: <код> Banana8 ... вызывает ошибку: <код> Banana9 ...

0  Что делает этот код файла пакетного файла?  ( What does this batch file code do ) 
Что делает этот код Bat? <код> for /f %%i in ('dir /b ClientJavascript*_min.js') do ( set n=%%~ni set t=!n:~0,-4! cp ClientJavascript%%i buildCl...

0  BAT файл, который FindStr String1 и String2  ( Bat file that findstr string1 and string2 ) 
Я пытаюсь сделать следующее: поиск через весь файл TXT в Temp, который начинается с «Micro» и найдет, если в любом из них существует следующие две строки. Мне...

4  Пакетный файл для перечисления пути файла и имя файла в CSV  ( Batch file to list file path and file name in a csv ) 
Я пытаюсь сделать пакетный файл, который перечисляет все файлы в папке и Sub Directors и экспортировки в CSV с размером файла, я правильно имею это: <код> @...

0  Запустите пакетный скрипт с администратором вправо на сетевом каталоге  ( Run batch script with admin right on network directory ) 
На Windows 7 Я устанавливаю один сетевой каталог, используя правый кнопкой мыши на компьютере, затем «подключить сетевой диск». После этого я хочу выполнить п...

Связанный проблема

5  Как сделать пакетный файл, который обнаруживает, когда программа закрывается, а затем перезагружает приложение? 
2  Консоль Windows выводится из неразборчива WAIFU2X-Caffe 
100  Как мне захватить вывод скрипта, если он работает планировщиком задач? 
9  Пакетные файлы. Если заявления? 
0  Используйте переменную петли для вызова заранее определенной переменной 
1  Если состояние внутри для петли в партии 
3  Пакетный файл для копирования файла, если файл существует файл переименования с Timestamp 
17  Как проверить, содержит ли текстовый файл определенный текст в партии? 
46  Как запустить пакетный скрипт (.bat file) из Eclipse 
0  Как написать пакет, которая копирует сам? 
1  Вызов sqlcmd.exe в пакетном файле с использованием переменных вызывает ошибку: «Неожиданный аргумент» 
0  Что делает этот код файла пакетного файла? 
0  BAT файл, который FindStr String1 и String2 
4  Пакетный файл для перечисления пути файла и имя файла в CSV 
0  Запустите пакетный скрипт с администратором вправо на сетевом каталоге 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.