获取信息 - 如果存在忽略变量的文件夹

时间:2016-03-16 09:53:33

标签: variables batch-file if-statement cmd directory

我正在创建一个批处理文件,告诉文件夹是否存在。 \..\ - 考虑所有计算机上的路径是否恒定。 \..\CompanyName\ - 现在我可以检查此文件夹是否存在。 \..\Companyname\Productname version x.x.x - 现在我无法检查“产品”是否退出,因为如果我使用if exist "%constantpath%\Productname version 1.2.3" (code block) 如果整个名称匹配,条件将仅返回true。如果Productname版本是1.2.4,它将返回false.so批处理文件好了死。当我尝试了 set dest=Productname Version 1.2.3

set temp=%dest:~0,11% // which means "Productname"

if exist "%constantpath%\%temp% (code block) 看是否只有“产品名称存在 它返回错误 命令语法不正确。我认为路径不正确

3 个答案:

答案 0 :(得分:1)

  

这样批处理文件就好了。

老狗还有生命。

if exist无法使用通配符,但dir可以:

dir /s "%constantpath%\Productname version 1.*" >nul && (
  echo yes 
) || (
  echo no
)

此示例将检查版本1.x.x

"%constantpath%\Productname*"将检查是否有任何版本(包含或不包含字符串version ...。根据您的需要进行调整。

如果您需要完整的名称:

for /f "tokens=*" %%i in ('dir /s /b "%constantpath%\Productname version 1.*"` do set "fullname=%%i"

答案 1 :(得分:1)

if exist接受外卡,以便您可以尝试:

if exist "%constantpath%\Productname version ?.?.?" (
  echo it exists
)

它也适用于非规范化路径,因此您可以使用\..\

之类的内容

答案 2 :(得分:0)

我强烈建议使用PowerShell,我必须做一些最近类似的事情,因为我需要运行一个可能位于不同位置的安装程序,但第一部分将始终保持不变。它将如下。

$BaseDir = "\..\CompanyName\"
$NameToFind = "ProductName"

$MyVariable = Get-ChildItem $BaseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name -like ($NameToFind)}

$productVersion = $myvariable.FullName

Write-Host $productVersion