<было неожиданно в это время (пакетный скрипт)
Я начинающий сценарист bash/bash, и у меня возникли проблемы с этим кодом. Остальная часть кода работает отлично, это только первый раздел параметров, который вызывает проблемы. Любая помощь / совет будут с благодарностью приняты. Вот мой код:
@echo off
:commandline
if [%1]==[] (
echo No data entered. Please continue as normal.
goto :welcome
)
IF NOT %3 == "" (
echo.
echo Too many parameters given...
goto :welcome
)
IF EXIST %2 (
xcopy %2 bak_%2
%2 notepad
goto :eof
exit.
)
:welcome
echo.
echo **********************************
echo Welcome to the Backup Program!!
echo **********************************
echo.
set /p answer=Please enter your name:
echo.
echo Hello %answer% please make a selection from the menu below
echo.
:start
echo Option 1 - Backup and Edit
echo Option 2 - Create a Batch File
echo Option 3 - Quit
echo.
choice /C:321
IF errorlevel 3 goto option1
IF errorlevel 2 goto option2
IF errorlevel 1 goto option3
:option1
echo.
set /p file=Please type in the name of the file:
if %file% == quit (
echo.
echo The program will now close.
pause
Exit
)
if %file% == Quit (
echo.
echo The program will now close.
pause
Exit
)
IF NOT EXIST %file% goto :option1
echo.
copy %file% bak_%file%
%file% notepad
pause
echo.
goto :start
:option2
echo > %file%.bat
echo file=%file% > %file%.bat
echo IF EXIST %file% ( >> %file%.bat
echo copy %file% bak_%file% >> %file%.bat
echo %file% notepad >> %file%.bat
echo ) else ( >> %file%.bat
echo echo .> %file% >> %file%.bat
echo %file% notepad >> %file%.bat
echo ) >> %file%.bat
goto :eof
:option3
goto :eof
:eof
echo Thanks for using the Backup Program.
pause
2 ответа
Можете ли вы указать точный способ вызова сценария?
Я считаю, что проблема в линии IF NOT %3 == "" (
, Похоже, вы пытаетесь проверить, что третий параметр пуст. Я предполагаю, что вы вызываете скрипт, выполняя что-то вроде этого: script.bat parm1 parm2 < some_file
, Я думаю, что это видение <
в качестве третьего параметра, поэтому он пытается выполнить IF NOT < == ""
который является неверным синтаксисом. Положить двойные кавычки вокруг %3
должен исправить эту часть. Я не уверен, что это исправит тот факт, что это лечит <
в качестве параметра, хотя.
Вот что я вижу, когда читаю твой сценарий. Используйте мой ответ в качестве руководства по отладке, которое поможет вам заставить ваш скрипт работать так, как вы этого хотели.
IF NOT %3 == "" (
должно быть IF NOT "%3" == "" (
Этот же раздел должен goto :eof
?
exit.
в IF EXIST %2
никогда не будет выполнено, и если это подразумевалось как выход, не должно быть точки. Просто удалить?
Все места, где у вас есть %file% notepad
(и тому подобное) не имеет смысла для меня. Должны ли они быть notepad %file%
редактировать файл в блокноте?
В option2:
линия echo > %file%.bat
ничего не делает, так как следующая строка снова создаст файл с нуля.