文件存在不与批处理文件中的变量一起使用

时间:2015-01-24 00:37:17

标签: windows batch-file

在Windows批处理文件中,我可以使用文件名字符串而不是文件名变量。

@echo off

SetLocal enableDelayedExpansion

set Route_Riter=C:\Program Files (x86)\Route_Riter
echo.%Route_Riter%
if exist "C:\Program Files (x86)\Route_Riter" (
 echo.Route_Riter is installed.
)
if not exist "!Router_Riter!" (
 echo.Route_Riter not installed.
 exit /b
)

使用变量的测试返回false时,带文本常量的if测试为true。批量输出

C:\Program Files (x86)\Route_Riter
Route_Riter is installed.
Route_Riter is not installed.

在第二个if中使用%Route_Riter%会出现错误

  

该命令的语法不正确。

我打算通过从注册表项中读取来设置变量,但首先要让变量设置为常量字符串。如果注册表项不存在,也将使用该常量。

2 个答案:

答案 0 :(得分:1)

if not exist "!Router_Riter!" (

应该是

if not exist "!Route_Riter!" (

或者最好

if not exist "%Route_Riter%" (

Router_Riter未定义,因此是“错误的”行为。

我无法使用syntax error重现您的%

答案 1 :(得分:-1)

在DOS / Windows中检测文件夹时需要非常小心。最好记住,因为它不是很明显是文件夹真的是一个"幻想"在DOS / Windows中的文件。您仍在检查是否存在文件,但您必须采用不同的方式对待它。

我会使用以下内容(注意:带点的尾部斜线很重要):

if exist "C:\Program Files (x86)\Route_Riter\." (
 echo.Route_Riter is installed.
)

事实上,我会使用以下内容,因为您可能正在处理32-64位计算机的混合:

if exist "%ProgramFiles%\Route_Riter\." (
 echo.Route_Riter is installed.
)