2017-06-15 107 views
0

!每次我运行它它总是这样说。这就是它说的:批处理文件:该命令的语法是我的批处理文件有问题不正确

the syntax of the command is incorrect. 

而这就是其余的代码。我试图做我自己的代码。就像打开记事本一样,除了没有图形干扰。你们能帮我吗?

set /p ans= New files or saved file! n or a : 

if [%ans%] = [n] (
    set /p mkfl= Files you want to save in! [filename].[bat;cmd;txt] : 
    set /p val= Enter Key to Save!: 
    echo %val% > %mkfl% 
    SET /p t= y: 
) else if [%ans%] equ [a] (
    set /p flnm= Type in the filename!: 
    set /p val= Type in words! 
    set /p ans= Enter [s,o] to re-save or overwrite!: 

    if [%ans%] equ [s] (
     ECHO append 
    ) else if [%ans%] equ [o] (
     ECHO overwrite 
    ) else (
     ECHO problem! 
    ) 

    SET /p z= f: 
) else (
    ECHO problem occurred during executing! 
    SET /p a= p: 
) 

set /p fk= . 
+0

请阅读'IF'命令的帮助。通过在命令提示符下键入批处理文件名打开一个命令提示符,然后再运行批处理文件下一次故障排除。 – Squashman

+0

sry,我是新来的CMD。 – Andrew

+0

非常感谢#Squashman!这帮了我很多! – Andrew

回答

1

你的问题出在下面的语句

echo %val% > %mkfl% 

为了解决这个问题,你需要search SO(使用该设施在顶栏)为delayed expansion

本质上,由于在达到if语句时未定义mkfl,因此语句评估为echo >,这是无效语法。讨论delayed expansion的项目应说明如何克服这一点。

+0

所提到的声明甚至评估为'echo>' – JosefZ

+0

@JosefZ:应用了更正。好点子! – Magoo

0

有代码中的一些错误(例如,使用= EQU或代替==在IF语句)。下面是修改后的版本至少运行......虽然它可能不是你想要它做什么,它可能让你开始。

@echo off 
setlocal enabledelayedexpansion 
set /p ans= New files or saved file n or a : 
if [%ans%] == [n] (
    set /p mkfl= Files you want to save in [filename].[bat;cmd;txt] : 
    set /p val= Enter Key to Save: 
    echo %val% > !mkfl! 
    SET /p t= y: 
) else if [%ans%] == [a] (
    set /p flnm= Type in the filename: 
    set /p val= Type in words: 
    set /p ans= Enter [s,o] to re-save or overwrite: 
    if [%ans%] == [s] (
    ECHO append 
) else if [%ans%] equ [o] (
    ECHO overwrite 
) else (
    ECHO problem 
) 
    SET /p z= f: 
) else (
    ECHO problem occurred during executing 
    SET /p a= p: 
) 
set /p fk= . 
0

我想了解你的意图的情况有点困难,但已采取了最好的猜测在未经测试的重写以下:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET/P "ansone= New files or saved file! n or a: " 
IF /I "%ansone%"=="n" (
    SET/P "mkfl= Files you want to save in! [filename].[bat;cmd;txt]: " 
    SET/P "valone= Enter Key to Save!: " 
    >"!mkfl!" ECHO !valone! 
    SET/P "t= y: " 
) ELSE (
    IF /I "%ansone%"=="a" (
     SET/P "flnm= Type in the filename!: " 
     SET/P "valone= Type in words! " 
     SET/P "anstwo= Enter [s,o] to re-save or overwrite!: " 
     IF /I "!anstwo!"=="s" (
      ECHO append 
     ) ELSE (
      IF /I "!anstwo!"=="o" (
       ECHO overwrite 
      ) ELSE (
       ECHO problem! 
      ) 
     ) 
     SET/P "z= f: " 
    ) ELSE (
     ECHO problem occurred during executing! 
     SET/P "a= p: " 
    ) 
) 
SET/P "fk= . " 

我假设你一个人知道这个提示的意图设置为%t%,%z%,%a% & %fk%因此,根据您的原始脚本将它们留下。