我是一个初学者批处理/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
发布于 2014-05-11 19:10:32
您能提供调用脚本的确切方式吗?
我认为问题出在IF NOT %3 == "" (
这一行。看起来您正在尝试验证第三个参数是否为空。我猜你是通过这样做来调用脚本的:script.bat parm1 parm2 < some_file
。我认为它将<
视为第三个参数,所以它试图执行IF NOT < == ""
,这是无效的语法。在%3
两边加上双引号应该可以修复这一部分。不过,我不确定这是否能解决它将<
视为参数的事实。
发布于 2015-12-30 06:54:36
这是我在读你的脚本时看到的。使用我的答案作为调试指南,可以帮助您让脚本按照您想要的方式运行。
IF NOT %3 == "" (
应为IF NOT "%3" == "" (
同一节应该goto :eof
IF EXIST %2
中的exit.
永远不会被执行,如果它是用来退出的,就不应该有句点。只是删除吗?
所有你有%file% notepad
(和类似的)的地方对我来说都没有意义。他们是否应该在记事本中编辑文件的notepad %file%
?
在option2:
中,echo > %file%.bat
行什么也不做,因为下面这行将再次从头开始创建文件。
https://stackoverflow.com/questions/23596471
复制相似问题