Batch file 防止使用cmd覆盖文件(如果存在)

Batch file 防止使用cmd覆盖文件(如果存在),batch-file,cmd,command-prompt,Batch File,Cmd,Command Prompt,我目前正在编写一个.bat批处理文件来执行安装文件。在运行安装文件之前,我检查目录是否存在,以避免重新安装应用程序 我通过使用If Not Exist filename语句来实现这一点。如果安装的文件不存在,则执行安装文件 出于某种原因,当我使用已经安装的应用程序测试它时,它仍在尝试通过它重新安装应用程序 以下是我的代码片段: cd "C:\Documents and Settings\John\Start Menu\Programs\" pause If NOT exist "Software

我目前正在编写一个.bat批处理文件来执行安装文件。在运行安装文件之前,我检查目录是否存在,以避免重新安装应用程序

我通过使用
If Not Exist filename
语句来实现这一点。如果安装的文件不存在,则执行安装文件

出于某种原因,当我使用已经安装的应用程序测试它时,它仍在尝试通过它重新安装应用程序

以下是我的代码片段:

cd "C:\Documents and Settings\John\Start Menu\Programs\"
pause
If NOT exist "Software Folder"\ (
 start \\filer\repo\lab\"software"\"myapp"\setup.exe
 pause
) 
其中,
SoftwareFolder
“C:\Documents and Settings\John\Start Menu\Programs\”的子目录
我正在检查它是否存在于我的
Programs
文件夹中

我知道我的
start
命令没有问题。我感觉我的开始
CD
命令或其中一个参数有问题


非常感谢,伙计们

使用“如果不存在”代码中文件夹的完整路径。这样你就不用再CD了:

If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\"

我注意到一些与此相关的问题,对于刚开始使用的人,或者一个缺乏经验的用户来说,这些问题可能很有用。首先

CD /D "C:\Documents and Settings\%username%\Start Menu\Programs\"
两件事一是,CD后的a/D在确保目录更改方面可能很有用,但这并不是真的必要,第二,如果要在用户之间传递此信息,则必须添加代码%username%,而不是您的姓名,这使代码在任何计算机上都可用,只要他们将您的setup.exe文件与您在计算机上的位置相同。当然,确保这一点更加困难。 还有

这里的开始代码可以这样设置,但是正确的语法是

start "\\filter\repo\lab\software\myapp\" setup.exe

这将运行:setup.exe,位于:\filter\repo\lab…等\

正如Escobar Ceser的回答一样,我建议在整个路径周围使用引号。这是将整个路径包装为“”的常用方法,而不仅仅是路径中单独的目录名

我有一个类似的问题,它不适合我。但是,在路径中不能将“”用于单独的目录名,因为路径包含环境变量,而环境变量本身包含多个目录层次结构。结论是我错过了“结束”和“结束”之间的空隙(

正确的版本(括号前有空格)为

If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
 start "\\filer\repo\lab\software\myapp\setup.exe"
 pause
) 

我也尝试过,但它不起作用。但当我不存在时,C:\“文档和设置”\John\“开始菜单”\Programs\“软件文件夹”\也确保第一个参数(窗口标题)of start命令按预期工作。每次您将其放入脚本时,它要么工作,要么不工作。有时在命令开始工作之前添加一个伪命令。
If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
 start "\\filer\repo\lab\software\myapp\setup.exe"
 pause
)