我是一个初学者批处理/重击脚本编写器,并且在使用此代码时遇到了一些麻烦。其余的代码工作得非常好,它只是第一个参数部分很麻烦。我们将非常感激地提供任何帮助/建议。这是我的代码:
@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
答案 0 :(得分:0)
您能提供调用脚本的确切方式吗?
我认为问题出在IF NOT %3 == "" (
行。看起来您正在尝试验证第三个参数是否为空。我猜你是通过这样做来调用脚本的:script.bat parm1 parm2 < some_file
。我认为它将<
视为第三个参数,因此它试图执行IF NOT < == ""
,这是无效的语法。在%3
周围放置双引号应该可以修复该部分。我不确定这是否会解决它将<
视为参数的事实。
答案 1 :(得分:0)
这是我在阅读你的剧本时看到的内容。使用我的答案作为调试指南,可以帮助您按照自己的方式运行脚本。
IF NOT %3 == "" (
应为IF NOT "%3" == "" (
同一部分应goto :eof
?
exit.
中的IF EXIST %2
永远不会被执行,如果它被视为退出,则不应该有句号。只是删除?
您拥有%file% notepad
(和类似)的所有地方对我来说都没有意义。他们应该notepad %file%
在记事本中编辑文件吗?
在option2:
中,echo > %file%.bat
行无效,因为以下行会再次从头开始创建文件。