【问题标题】:Syntax incorrect with batch?批处理的语法不正确?
【发布时间】:2014-11-15 00:36:12
【问题描述】:
@echo off
title LocalTransmit Messaging Service Version 1.0
color f0
:startup
start run.cmd
set /P locationVal="Enter where you are (home or school):"
if "%locationVal%"=="home" (
set place=C:\Users\Andrew\Data\Chat\chatroom.chatfile
echo %computername% has joined the chatroom! >> %place%
goto message
)
if "%locationVal%"=="school" (
set place=\\HS-LAB-12\Users\student\Data\Chat\chatroom.chatfile
echo %computername% has joined the chatroom! >> %place%
goto message
)
goto error

所以上面的代码是一个短消息程序的开始代码。我试图让它更加用户友好,但突然上面的代码导致命令提示符窗口关闭,并导致在窗口关闭之前提示符下方短暂出现“命令的语法不正确”。我无法弄清楚我的语法有什么问题。非常感谢任何帮助。

附: .chatfile 是由该程序的先前版本生成的,其作用类似于普通文本文件。

【问题讨论】:

    标签: batch-file syntax syntax-error


    【解决方案1】:

    标准delayedexpansion 问题 - 搜索 SO - 已被覆盖数百次。

    在块语句(a parenthesised series of statements) 中,整个块被解析并然后执行。块中的任何 %var% 都将替换为该变量的值在解析块时 - 在块执行之前 - 同样适用于 FOR ... DO (block)

    在您的情况下,placeblock 中被更改,因此您需要使用其中一种机制来解决问题。

    在例程开始时,place 未定义,因此您的代码被解析为

    echo %computername% has joined the chatroom! >>
    

    因此是语法错误报告。

    尝试从块语句中删除该行并将其放在:message 标签之后:

    :message
    echo %computername% has joined the chatroom! >> %place%
    

    您的代码将变得更短。

    【讨论】:

    • 非常感谢!我设置了一个名为 a=1 的变量,我做了它,所以它只执行回显“(名称)已加入聊天室!”一次,在 :message 页面上。
    【解决方案2】:

    在上面代码的顶部附近添加。你得到了什么?里面有特殊字符吗?

    echo(%ComputerName%
    pause
    

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多