gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как проверить синтаксис CMD/Batch файла под Windows?

Вот такой файлик пишет "ошибка в синтаксисе команды". Я не вижу какой-то очевидной вещи.

@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
  • Вопрос задан
  • 1905 просмотров
Решения вопроса 3
Почитайте про SetLocal EnableDelayedExpansion, мне кажется все Ваши проблемы связаны с ним.

Например, вот в этом примере всё было очень похоже - Почему в цикле for так странно ведет себя переменная?
Ответ написан
@Olgeir
1. В последнем примере у вас ошибка присвоения. Уберите пробел после знака =. Сейчас вы переменным base1 и base1 присваиваете пробелы.
SET /p base1 =Введите базу экспорта данных ^>
SET /p base1 =Введите таблицы через пробел или (пусто), если вся база ^>

2. Если вы используете echo для вывода содержимого переменных всегда вывод переменной обрамляйте чем-нибудь, например echo [%a%], иначе вы рискуете не увидеть что в переменной строка состоящая скажем из 10 пробелов.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Закоментируйте в начале @echo off.
Запустите с крипт с перенаправлением в файл так:
test.bat 1>file.log 2>&1
После исполнения в файле найдете ошибку и строку где она произошла.
Учтите, что на экран ничего выдаваться не будет, вводить придется в слепую.
Скидывайте сюда блок кода в котором происходит ошибка.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы