<此时出乎意料(批处理脚本)

时间:2014-05-11 18:39:51

标签: batch-file command-line parameters

我是一个初学者批处理/重击脚本编写器,并且在使用此代码时遇到了一些麻烦。其余的代码工作得非常好,它只是第一个参数部分很麻烦。我们将非常感激地提供任何帮助/建议。这是我的代码:

@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 个答案:

答案 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行无效,因为以下行会再次从头开始创建文件。