如果我从新的命令提示符重新运行,批处理文件无法正常工作

Posted

技术标签:

【中文标题】如果我从新的命令提示符重新运行,批处理文件无法正常工作【英文标题】:Batch file not working properly if I re run from a new command prompt 【发布时间】:2018-01-10 01:55:46 【问题描述】:

我编写了一个批处理文件,用于清理我的一个项目工作的恢复文件以进行测试。脚本解释如下:

    它将运行一个可执行文件,该可执行文件将 dll 文件作为参数,然后运行一个进程。

    如果进程在进行某些计算之前被杀死,它会创建恢复文件。

    这里我的脚本总是会在清理完恢复文件后加载 dll,以避免通过访问特定路径手动删除文件。

    为了通用,批处理脚本会将 dll 路径和 dll 名称存储在文本文件中,它会自动从中选择路径。

下面是批处理脚本代码:

@echo off
::Display the information first time if variables not set. Store them for future retrieval
set "currPath=%cd%"
if exist dllPath.txt (
    set /p dllPath<=dllPath.txt
) else (
    set /p dllPath="Provide game dll path (1st time only): "
    ::save the environment variables
    echo %dllPath% > "dllPath.txt"
)

if exist dllName.txt (
    set /p dllName<=dllName.txt
) else (
    set /p dllName="Provide game dll name (1st time only): "
    ::save the environment variables
    echo %dllName% > "dllName.txt"
)


::clean the data
cd /D %dllPath%
@echo %dllPath%
del *.bin
del *.recovery

%dllPath%\..\..\RunProcess.exe -dll %dllPath%\%dllName% 
cd /D %currPath%

脚本问题

    第一次从命令提示符运行脚本时,脚本能够将 dll 路径和名称正确存储在文本文件中。

    如果我在同一个命令提示符下多次运行脚本,该过程将成功运行。

    但是如果我在运行脚本后关闭命令提示符并尝试从新打开的命令提示符运行脚本,脚本将抛出错误为

命令的语法不正确。

我试图在谷歌上搜索并尝试修复它,但无法解决。这可能是一个愚蠢的问题,但是作为批处理脚本的新手,我没有任何其他选择。

【问题讨论】:

注释掉第一行的@echo off。它将允许您找出哪条线路出现故障,此时您可以尝试找出原因。在黑暗中盲目地跑来跑去猜测是行不通的。 我也这样做了,并且知道在读取文本文件时如果出现错误。 首先,不要在 cmets 中添加详细信息,而是在 edit 帖子中添加它们。其次,您有两个单独的 if 语句,因此您添加的详细信息没有多大帮助。 哎呀,我的错。谢谢你纠正我。 :) 我看到了三个问题:首先,&lt;= 应该是 =&lt;,正如其他人所评论的那样。其次,将:: cmets 放入block(带括号的一系列行)会导致问题,因为标签在块中是非法的,而:: 注释实际上是标签(改用传统的REM )第三,由于您的代码中没有setlocal,它通常遵循@echo off,因此在一次运行中建立的任何环境变量都将保持设置为该值,以便在同一cmd 实例中进一步运行。这实际上似乎表明效果应该是完全不同的,但可能是相关的 【参考方案1】:

= 放在&lt; 之前。

set /p dllName=<dllName.txt

【讨论】:

以上是关于如果我从新的命令提示符重新运行,批处理文件无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

打包为 IExpress 可执行文件的批处理文件无法正常运行

通过 Windows 批处理文件执行时 ECHO 无法正常工作

解决'不是内部或外部命令,也不是可运行的程序

Apache问题处理

如何使批处理文件在 anaconda 提示符下运行

命令提示符总是提示不是内部外部命令