我目前正在编写一个执行安装文件的.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
命令或其中一个参数有问题。
非常感谢,伙计们!
答案 0 :(得分:44)
使用If Not Exist代码中文件夹的FULL路径。然后你甚至不再需要CD了:
If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\"
答案 1 :(得分:3)
我注意到这个问题可能对刚开始的人或者有点缺乏经验的用户有用。第一...
CD /D "C:\Documents and Settings\%username%\Start Menu\Programs\"
两件事情是CD后的A / D可能证明在确保目录被更改时有用,但实际上并不是必需的,其次,如果您要将此用户传递给用户,则必须添加,而不是你的名字,代码%username%,这使得代码可以在任何计算机上使用,只要它们的setup.exe文件与您在计算机上的位置相同。当然,确保这一点更加困难。 也...
start \\filer\repo\lab\"software"\"myapp"\setup.exe
此处的起始代码可以像这样设置,但正确的语法是
start "\\filter\repo\lab\software\myapp\" setup.exe
这将运行:setup.exe,位于:\ filter \ repo \ lab ...等。\
答案 2 :(得分:3)
正如在Escobar Ceaser的答案中,我建议在整个路径中使用引号。它是将整个路径包装在""中的常用方法,而不仅仅是路径中的单独目录名称。
我有一个类似的问题,它对我没用。但是没有选择使用""在单独的目录名称的路径中,因为路径包含环境变量,它们自己覆盖多个目录层次结构。结论是我错过了结束之间的空间。和(
正确的版本,括号前面的空格,将是
If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
start "\\filer\repo\lab\software\myapp\setup.exe"
pause
)