当前位置: 首页 > 知识库问答 >
问题:

批处理脚本语法不正确

苏畅
2023-03-14

我在这个Batch脚本中有一个语法错误,但我不知道它是从哪里来的。我是批处理新手,所以我很难弄清楚这一点。我感觉这与if语句有关,但我不确定。

@ECHO Off

:: Variables
@SET UI_Debug_Path="rootpath"

@SET CoreDev_Bin="destinationPath1"
@SET Website_Bin="destinationPath2"

@SET Business_DLL="Business.dll"
@SET Business_PDB="Business.pdb"
@SET DataAccess_DLL="DataAccess.dll"
@SET DataAccess_PDB="DataAccess.pdb"
@SET UI_DLL="Forms.dll"
@SET UI_PDB="Forms.pdb"

@SET doCopy=n
:: Prerequisite
echo Ensure you have permission/access to files!
SET /P doCopy=Copy Files (y\n) (Default - n)?

IF /I "%doCopy%"=="Y" (
    :: .DLLs
    echo "Copying .DLLs to CoreDev\Bin and Website\Bin"

    COPY %UI_Debug_Path%%Business_DLL% %CoreDev_Bin%

    COPY %UI_Debug_Path%%Business_DLL% %Website_Bin%

    :: COPY %UI_Debug_Path%%DataAccess_DLL% %CoreDev_Bin% :: Don't think we need DataAccess.dll copied in CoreDev\bin

    COPY %UI_Debug_Path%%DataAccess_DLL% %Website_Bin%

    COPY %UI_Debug_Path%%UI_DLL% %CoreDev_Bin%

    ::COPY %UI_Debug_Path%%UI_DLL% %Website_Bin% :: Don't think we need UI.dll in Website\bin


    :: .PDB files
    echo "Copying .PDB to CoreDev\Bin and Website\Bin"
    COPY %UI_Debug_Path%%Business_PDB% %CoreDev_Bin%

    COPY %UI_Debug_Path%%Business_PDB% %Website_Bin%

    ::COPY "%UI_Debug_Path%%DataAccess_PDB% %CoreDev_Bin% :: Don't think we need DataAccess.pdb in CoreDev\bin

    COPY %UI_Debug_Path%%DataAccess_PDB% %Website_Bin%

    COPY %UI_Debug_Path%%UI_PDB% %CoreDev_Bin%

    ::COPY %UI_Debug_Path%%UI_PDB% %Website_Bin% :: Don't think we need UI.pdb in WebSite\bin
)

Pause

我得到的当前错误是:

该命令的语法不正确。

共有3个答案

松成和
2023-03-14

试着这样做:

@ECHO Off

:: Variables
@SET UI_Debug_Path="rootpath"

@SET CoreDev_Bin="destinationPath1"
@SET Website_Bin="destinationPath2"

@SET Business_DLL="Business.dll"
@SET Business_PDB="Business.pdb"
@SET DataAccess_DLL="DataAccess.dll"
@SET DataAccess_PDB="DataAccess.pdb"
@SET UI_DLL="Forms.dll"
@SET UI_PDB="Forms.pdb"

@SET doCopy=n
:: Prerequisite
echo Ensure you have permission/access to files!
SET /P doCopy=Copy Files (y\n) (Default - n)?

IF /I "%doCopy%"=="Y" (
    :: .DLLs
    echo "Copying .DLLs to CoreDev\Bin and Website\Bin"

    COPY %UI_Debug_Path%%Business_DLL% %CoreDev_Bin%

    COPY %UI_Debug_Path%%Business_DLL% %Website_Bin%

    :: COPY %UI_Debug_Path%%DataAccess_DLL% %CoreDev_Bin% :: Don't think we need DataAccess.dll copied in CoreDev\bin

    COPY %UI_Debug_Path%%DataAccess_DLL% %Website_Bin%

    COPY %UI_Debug_Path%%UI_DLL% %CoreDev_Bin%

    ::COPY %UI_Debug_Path%%UI_DLL% %Website_Bin% :: Don't think we need UI.dll in Website\bin


    :: .PDB files
    echo "Copying .PDB to CoreDev\Bin and Website\Bin"
    COPY %UI_Debug_Path%%Business_PDB% %CoreDev_Bin%

    COPY %UI_Debug_Path%%Business_PDB% %Website_Bin%

    ::COPY "%UI_Debug_Path%%DataAccess_PDB% %CoreDev_Bin% :: Don't think we need DataAccess.pdb in CoreDev\bin

    COPY %UI_Debug_Path%%DataAccess_PDB% %Website_Bin%

    COPY %UI_Debug_Path%%UI_PDB% %CoreDev_Bin%

    rem COPY %UI_Debug_Path%%UI_PDB% %Website_Bin% :: Don't think we need UI.pdb in WebSite\bin
)

Pause

更多信息请点击这里

邬弘化
2023-03-14

解释器将从带有开括号的行一直读取到带有结束括号的行,并将其视为一个大行。在上使用回显应该有助于向您展示这一点,并有助于定位任何可能导致错误的行。

您可以使用goto来避免制作如此巨大的如果代码块由大括号括起来。

使用goto还有助于避免诸如任何需要延迟扩展变量、注释问题等问题。

@ECHO On

:: Variables
@SET UI_Debug_Path="rootpath"

@SET CoreDev_Bin="destinationPath1"
@SET Website_Bin="destinationPath2"

@SET Business_DLL="Business.dll"
@SET Business_PDB="Business.pdb"
@SET DataAccess_DLL="DataAccess.dll"
@SET DataAccess_PDB="DataAccess.pdb"
@SET UI_DLL="Forms.dll"
@SET UI_PDB="Forms.pdb"

@SET doCopy=n
:: Prerequisite
echo Ensure you have permission/access to files!
SET /P "doCopy=Copy Files (y\n) (Default - n)? "

IF /I NOT "%doCopy%"=="Y" GOTO :next

:: .DLLs
echo "Copying .DLLs to CoreDev\Bin and Website\Bin"

COPY %UI_Debug_Path%%Business_DLL% %CoreDev_Bin%

COPY %UI_Debug_Path%%Business_DLL% %Website_Bin%

:: COPY %UI_Debug_Path%%DataAccess_DLL% %CoreDev_Bin% :: Don't think we need DataAccess.dll copied in CoreDev\bin

COPY %UI_Debug_Path%%DataAccess_DLL% %Website_Bin%

COPY %UI_Debug_Path%%UI_DLL% %CoreDev_Bin%

::COPY %UI_Debug_Path%%UI_DLL% %Website_Bin% :: Don't think we need UI.dll in Website\bin


:: .PDB files
echo "Copying .PDB to CoreDev\Bin and Website\Bin"
COPY %UI_Debug_Path%%Business_PDB% %CoreDev_Bin%

COPY %UI_Debug_Path%%Business_PDB% %Website_Bin%

::COPY "%UI_Debug_Path%%DataAccess_PDB% %CoreDev_Bin% :: Don't think we need DataAccess.pdb in CoreDev\bin

COPY %UI_Debug_Path%%DataAccess_PDB% %Website_Bin%

COPY %UI_Debug_Path%%UI_PDB% %CoreDev_Bin%

::COPY %UI_Debug_Path%%UI_PDB% %Website_Bin% :: Don't think we need UI.pdb in WebSite\bin

:next

Pause

一旦您知道任何问题都已解决,请将< code>echo off设置为。

丁阳炎
2023-03-14

注释掉的 COPY 命令的语法导致了问题。通过将注释从 :: 更改为 rem,如下所示,脚本将运行。

命令解释器似乎混淆了标签和注释

IF /I "%doCopy%"=="Y" (
  :: .DLLs
  echo "Copying .DLLs to CoreDev\Bin and Website\Bin"

  COPY %UI_Debug_Path%%Business_DLL% %CoreDev_Bin%

  COPY %UI_Debug_Path%%Business_DLL% %Website_Bin%

  rem :: COPY %UI_Debug_Path%%DataAccess_DLL% %CoreDev_Bin% :: Don't think we need DataAccess.dll copied in CoreDev\bin
)
 类似资料:
  • 主要内容:文档注释,第一批脚本程序通常,批处理文件中的第一行通常由以下命令组成。 echo命令 默认情况下,批处理文件将在运行时显示其命令。 这第一个命令的目的是关闭这个显示。 命令会关闭整个脚本的显示,除了命令本身之外。前面的符号使命令也适用于自己。 文档注释 很多时候批处理文件也包含以“Rem”命令开始的行。 这是编写注释和文档的一种方式。程序执行时忽略关键字之后的任何内容。 对于越来越复杂的批处理文件,这通常对理解程序执行一

  • 主要内容:输出通过使用重定向命令可以在批处理脚本中进行登录。 语法 创建一个名为的文件,并在文件中输入以下命令。 上面的命令有一个错误,因为命令的选项是以错误的方式给出的。 输出 如果带有上面的文件的命令运行为 - 而打开文件,会看到下面的错误。 这个命令的语法是 - 通过键入获取更多的帮助内容。 如果打开名为的文件,它会显示一个执行命令的日志。

  • 主要内容:错误消息,复杂的命令行,子程序,Windows版本通常情况下,运行批处理文件时可能会遇到问题,而且大多数情况下都需要以某种方式调试批处理文件,以确定是批处理文件本身的问题。 以下是一些可以帮助调试批处理脚本文件的技术。 错误消息 要找出消息的来源,请按照下列步骤操作 - 第1步 - 移除,即或。 第2步 - 使用必要的命令行参数运行批处理文件,将所有输出重定向到日志文件以供以后比较。 第3步 - 在文件中搜索错误消息 第4步 - 检查上一行是否有

  • 我正在尝试通过批处理文件创建vbs。但是有一行我包含一个对象。批处理文件无法将闭括号 )写入vbs,这在运行vbs时会导致错误。 批处理文件代码为: 输出: vbs zipIt.vbs vbs输出:Microsoft (R) Windows Script Host版本5.8版权所有(C) Microsoft Corporation。保留所有权利。 C: \Users\arvind\Desktop\

  • 正在尝试将Spring Batch Admin添加到现有的Spring Batch项目中。 我已经更新了网页。带有spring batch admin资源和spring batch admin manager的xml 我的设置: 在src/main/resources下/ 我添加了两个属性文件。1是批处理默认属性,它是一个空文件,另一个是批处理sqlserver。包含以下内容的属性: 在webap

  • 在运行这个脚本后,我发现一些软件出乎意料,这次我使用的是64位windows 7。正在尝试使用注册表获取软件的安装位置。如果我回显了_名称,那么我就得到了正确的安装位置,但脚本在if-else中退出,表示这次某个软件出人意料