Статья [CMD] Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл "вылетает"? Cmd ошибка в синтаксисе команды
[CMD] Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл "вылетает"?
Чтобы увидеть ошибки в синтаксисе, которые приводят к критическому завершению Batch-файла,необходимо запустить его из CMD.exe (интерпретатора).
Как?Этап 1. Подготовка:Если у Вас в скрипте указана директива для скрытия вывода выполняемых команд:
Она обычно идет первой строкой в коде. - Удалите ее, или закомментируйте:иначе будет сложно определить, какая команда вызывает "падение" скрипта или ошибку.Этап 2. Выполнение скрипта с перенаправлением вывода в файл протокола
Вариант 1. Для систем Windows XP и ниже:
ПУСК -> Выполнить (либо Win + R), вводим CMD, нажимаем {ENTER}
Откроется маленькое черное окно - консоль.В нем Вы увидите путь к каталогу, в котором будут выполняться команды в данный момент.Вам нужно перейти в каталог, где расположен бат-файл.Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команды:
(ввод каждой строки подтверждаем клавишей {ENTER})
Код:
cd /D "c:\temp" script > log.txt После ввода первой строки Вы увидете на экране приглашение вида:c:\temp> что свидетельствует об успешном переходе в каталог c:\tempВариант 2. Для систем Windows Vista и выше (переход в папку с батником сразу):
1. Перейдите на уровень выше от каталога, где находится Batch-файл(иными словами: Вам нужно видеть пиктограмму значка папки, в которой находится Batch-файл)Если Вы видите перед собой сам Batch-файл, достаточно нажать BackSpace (кнопка "стирания").
2. Наведите указатель мыши на папку с Batch-файлом.Нажмите и удерживайте кнопку "Shift". Вместе с этим нажмите правую кнопку мыши.
3. Выберите пункт "Открыть окно команд".
Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команду:
Нажимаем клавишу {ENTER}Этап 3. Анализ файла-протокола.
После завершения работы Batch-файла в папке C:\temp будет создан файл log.txtПередайте его специалистам, либо при наличии достаточного опыта проведите анализ самостоятельно.
Данный файл сохраняется в кодировке OEM-866, поэтому открывать его нужно в соответствующем редакторе: http://www.cyberforum.ru/cmd-bat/thread738351.htmlКак правило, критические ошибки указаны в самом конце протокола и они предваряют команду, которая их вызвала.
Этап 4. (опционально)Если бат-файл содержит цикл или является очень большим, полезным также будет подготовить лог уже с командой @echo offДобавьте ее в самое начало кода и повторите всю процедуру.
Альтернатива вызову батника из-под интерпретатора.В самом начале кода пишем:
Код:
Echo. 1>&3 2>&4 3>>log.txt 4>&3 и запускаем Batch-файл. Все команды, выводимые на экран будут сразу перенаправляться в файл. В этом случае на экране Вы не увидите ни выполняемых команд, ни вывода. Все они будут протоколироваться в файл log.txt.safezone.cc
Как проверить синтаксис CMD/Batch файла под Windows? — Toster.ru
Вот такой файлик пишет "ошибка в синтаксисе команды". Я не вижу какой-то очевидной вещи.@ECHO off SET /p base1=Введите базу экспорта данных ^> SET /p table=Введите таблицы через пробел или (пусто), если вся база ^> SET /p base2=Введите базу импорта данных ^> REM ЭКСПОРТ -- Если введены таблицы if NOT [%table%] == [] ( FOR %%i IN (%table%) DO ( SET filename=%base1%__%%~i.sql.gz ECHO Экспортируем таблицу `%%~i` из базы `%base1%` в файл `%filename%` mysqldump -h localhost -u USER -pPASS %base1% %%~i | gzip > %filename% ) ) REM ИМПОРТ -- Если введены таблицы if NOT [%table%] == [] ( FOR %%i IN (%table%) DO ( SET filename=%base1%__%%~i.sql.gz ECHO Удаляем таблицу `%%~i` из базы `%base2%` ECHO DROP TABLE IF EXISTS %%~i | mysql -h localhost -u USER -pPASS %base2% ECHO Импортируем файл `%filename%` в базу `%base2%` gzip -d < %filename% | mysql -h localhost -u USER -pPASS %base2% ) ) REM ЭКСПОРТ -- Если не введены таблицы if NOT [%table%] == [] ( SET filename=%base1%.sql.gz ECHO Экспортируем базу `%base1%` в файл `%filename%` mysqldump -h localhost -u USER -pPASS %base1% | gzip > %filename% ) REM ИМПОРТ -- Если не введены таблицы if NOT [%table%] == [] ( SET filename=%base1%.sql.gz ECHO Удаляем базу `%base2%` ECHO DROP DATABASE IF EXISTS %base2% | mysql -h localhost -u USER -pPASS ECHO Импортируем файл `%filename%` в базу `%base2%` gzip -d < %filename% | mysql -h localhost -u USER -pPASS %base2% ) ECHO Успешно выполнено pauseПопробовал так:
@echo off SET /p base1 =Введите базу экспорта данных ^> SET /p table =Введите таблицы через пробел или (пусто), если вся база ^> REM ЭКСПОРТ -- Если введены таблицы IF NOT [%table%]==[] ( FOR %%i IN (%table%) DO ( echo %%~i ) ) ECHO Успешно выполнено pauseвопреки ожиданиям не выводит ничего для входных данных [1] = base, [2] =text text2
toster.ru
windows - Ошибка команды синтаксиса
Хорошо, так как вы сузили проблему до следующего блока:
if !numFiles! gtr 2 ( gdal_merge.py -n 0 -a_nodata -32767 -of GTiff -o %out_path%\A!yearDay!.a1_file.file.tif !fileList! set "fileList=!fileList:~0,-1!" move !fileList: =,! "E:\Proc\Proc_Pro" )и cmd.exe не идентифицирует конкретную строку в этом блоке, вам необходимо временно изменить его, чтобы изолировать его до определенной строки. Измените раздел кода на:
if not !numFiles! GTR 2 goto xyzzy echo AAA xx!fileList!xx gdal_merge.py -n 0 -a_nodata -32767 -of GTiff -o %out_path%\A!yearDay!.a1_file.file.tif !fileList! echo BBB xx!fileList!xx set "fileList=!fileList:~0,-1!" echo CCC xx!fileList!xx echo DDD xx!fileList: =,!xx move !fileList: =,! "E:\Proc\Proc_Pro" :xyzzyЗатем снова запустите его с echo on. Структурирование этого пути позволит cmd выводить отдельные строки перед исполнением, а не весь блок if.
Этого, а также добавленных выражений echo, должно быть, хватит, чтобы отследить его.
Выполняя эти шаги отладки по некоторым соответствующим тестовым данным, это сводится к следующему:
C:\USERS\pax\Documents>echo >qqq1 C:\USERS\pax\Documents>echo >qqq2 C:\USERS\pax\Documents>echo >qqq3 C:\USERS\pax\Documents>mkdir qqq C:\USERS\pax\Documents>move qqq1,qqq2,qqq3 qqq The syntax of the command is incorrect.Другими словами, move не позволяет перемещать несколько разделенных запятыми файлов в целевой каталог, несмотря на то, что это кажется возможным в соответствии с выходом move/? ,
Это известная проблема, о которой вы можете прочитать здесь.
Вам нужно будет найти другой путь. Если вы можете гарантировать, что в именах файлов нет пробелов (если бы они были, ваше исходное решение не сработало бы), вы можете использовать что-то вроде:
@setlocal enableextensions enabledelayedexpansion @echo off rem Clean up first. del /s qqq1.txt qqq2.txt qqq3.txt >nul: 2>&1 rmdir /s /q qqq >nul: 2>&1 rem Make the files and directories. echo >qqq1.txt echo >qqq2.txt echo >qqq3.txt mkdir qqq rem Set up space-separated list. set filelist=qqq1.txt qqq2.txt qqq3.txt rem Move the files, this is the important bit. for %%f in (!filelist!) do move %%f qqq >nul: 2>&1 rem Check it worked. dir qqq @endlocalОсновная часть этого является тестовым жгутом, важным битом является линия:
for %%f in (!filelist!) do move %%f qqq >nul: 2>&1qaru.site
Ошибка в синтаксисе команды mklink
Вопрос: Как запустить Batch-файл? Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл не работает или "вылета
Как запустить Batch-файл? Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл не работает или "вылетает".Чтобы увидеть ошибки в синтаксисе, которые приводят к критическому завершению Batch-файла,необходимо запустить его из CMD.exe (интерпретатора).
Как?Этап 1. Подготовка:Если у Вас в скрипте указана директива для скрытия вывода выполняемых команд:
Она обычно идет первой строкой в коде. - Удалите ее, или закомментируйте:иначе будет сложно определить, какая команда вызывает "падение" скрипта или ошибку.Этап 2. Выполнение скрипта с перенаправлением вывода в файл протокола
Вариант 1. Для систем Windows XP и ниже:
ПУСК -> Выполнить (либо Win + R), вводим CMD, нажимаем {ENTER}
Откроется маленькое черное окно - консоль.В нем Вы увидите путь к каталогу, в котором будут выполняться команды в данный момент.Вам нужно перейти в каталог, где расположен бат-файл.Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команды:
(ввод каждой строки подтверждаем клавишей {ENTER})
Bash | ||
|
Вариант 2. Для систем Windows Vista и выше (переход в папку с батником сразу):
1. Перейдите на уровень выше от каталога, где находится Batch-файл(иными словами: Вам нужно видеть пиктограмму значка папки, в которой находится Batch-файл)Если Вы видите перед собой сам Batch-файл, достаточно нажать BackSpace (кнопка "стирания").
2. Наведите указатель мыши на папку с Batch-файлом.Нажмите и удерживайте кнопку "Shift". Вместе с этим нажмите правую кнопку мыши.
3. Выберите пункт "Открыть окно команд".
Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команду:
Нажимаем клавишу {ENTER}Этап 3. Анализ файла-протокола.
После завершения работы Batch-файла в папке C:\temp будет создан файл log.txtПередайте его специалистам, либо при наличии достаточного опыта проведите анализ самостоятельно.
Данный файл сохраняется в кодировке OEM-866, поэтому открывать его нужно в соответствующем редакторе: Как правило, критические ошибки указаны в самом конце протокола и они предваряют команду, которая их вызвала.
Этап 4. (опционально)Если бат-файл содержит цикл или является очень большим, полезным также будет подготовить лог уже с командой @echo offДобавьте ее в самое начало кода и повторите всю процедуру.
Альтернатива вызову батника из-под интерпретатора.В самом начале кода пишем:
Bash | ||
|
Можно выполнить при помощи программы Console Window Interceptor (Автор - Dragokas)
Сфера применения: Автоматически подключается к любому всплывающему консольному окну и не дает его закрыть по завершению работы (exit). Перехватывает текст и выводит его в окне формы.
Будет полезен для получения текста консольных приложений, которые нельзя запустить через cmd /c.
Состав: EXE + VB6 src.
-----------------------------------------------------------------------------------------------------------
Пример перехвата ошибки в выводе команды ExecuteFile программы AVZ:
1. Запускаем Console Interceptor. Выставляем интервал поиска окон в 1 мс. Нажимаем "Искать консольные окна".
2. Запускаем AVZ. Файл -> Выполнить скрипт:
Pascal | ||
|
В чем ошибка, думаю, сами должны догадаться.
Примечание по ExecuteFile:
Режим (Mode) должен быть обязательно не 0 (видимое окно). Terminate = false или WaitTime = 0 необязательно выставлять такими. AVZ в любом случае получит сигнал о завершении работы процесса, тем не менее консольное окно не закроется, пока к нему подключено в качестве отладчика другое приложение.
Чтобы не повалить перехватчик, необходимо сперва отключиться от консольного окна ("Deattach") кнопкой "Отключиться от окна".
forundex.ru
[CMD] Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл "вылетает"?
Как запустить Batch-файл с протоколированием?Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл не работает или "вылетает".Чтобы увидеть ошибки в синтаксисе, которые приводят к критическому завершению Batch-файла,необходимо запустить его из CMD.exe (интерпретатора).
Как?Этап 1. Подготовка:Если у Вас в скрипте указана директива для скрытия вывода выполняемых команд:
Она обычно идет первой строкой в коде. - Удалите ее, или закомментируйте:иначе будет сложно определить, какая команда вызывает "падение" скрипта или ошибку.Этап 2. Выполнение скрипта с перенаправлением вывода в файл протокола
Вариант 1. Для систем Windows XP и ниже:
ПУСК -> Выполнить (либо Win + R), вводим CMD, нажимаем {ENTER}
Откроется маленькое черное окно - консоль.В нем Вы увидите путь к каталогу, в котором будут выполняться команды в данный момент.Вам нужно перейти в каталог, где расположен бат-файл.Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команды:
(ввод каждой строки подтверждаем клавишей {ENTER})
Код:
cd /D "c:\temp" script > log.txt После ввода первой строки Вы увидете на экране приглашение вида:c:\temp> что свидетельствует об успешном переходе в каталог c:\tempВариант 2. Для систем Windows Vista и выше (переход в папку с батником сразу):
1. Перейдите на уровень выше от каталога, где находится Batch-файл(иными словами: Вам нужно видеть пиктограмму значка папки, в которой находится Batch-файл)Если Вы видите перед собой сам Batch-файл, достаточно нажать BackSpace (кнопка "стирания").
2. Наведите указатель мыши на папку с Batch-файлом.Нажмите и удерживайте кнопку "Shift". Вместе с этим нажмите правую кнопку мыши.
3. Выберите пункт "Открыть окно команд".
Например, Вам нужно запустить Batch-файл с именем script.cmd, расположенном в папке temp на диске C,тогда вводим команду:
Нажимаем клавишу {ENTER}Этап 3. Анализ файла-протокола.
После завершения работы Batch-файла в папке C:\temp будет создан файл log.txtПередайте его специалистам, либо при наличии достаточного опыта проведите анализ самостоятельно.
Данный файл сохраняется в кодировке OEM-866, поэтому открывать его нужно в соответствующем редакторе: http://www.cyberforum.ru/cmd-bat/thread738351.htmlКак правило, критические ошибки указаны в самом конце протокола и они предваряют команду, которая их вызвала.
Этап 4. (опционально)Если бат-файл содержит цикл или является очень большим, полезным также будет подготовить лог уже с командой @echo offДобавьте ее в самое начало кода и повторите всю процедуру.
Альтернатива вызову батника из-под интерпретатора.В самом начале кода пишем:
Код:
Echo. 1>&3 2>&4 3>>log.txt 4>&3 и запускаем Batch-файл. Все команды, выводимые на экран будут сразу перенаправляться в файл. В этом случае на экране Вы не увидите ни выполняемых команд, ни вывода. Все они будут протоколироваться в файл log.txt.safezone.cc