获取具有部分名称的文件的完整路径

获取具有部分名称的文件的完整路径

我想仅使用文件名的部分名称来获取文件的完整路径。以下批处理脚本未显示任何结果。完整路径为“D:\Site Information\HBOC\Cen As Install Files\CenASintstall_4.0(DS-70-026-W).exe”

@echo off
Setlocal EnableDelayedExpansion
set /p "pc=Enter Computer Name : "

:opt1 -not workable
for /f "tokens=*" %%a in ('dir "D:\Site Information" /s /b ^| findstr "(%pc%).exe"') do echo %%~dpa

:opt2 -not workable
for /f "tokens=* delims=\" %%a in ('dir "D:\Site Information" /s /b ^| findstr "(%pc%).exe"') do echo %%~dpa
Pause

修订 1 我使用几个选项来获取结果。这是我的脚本和屏幕截图。我还想在搜索结果中包含文件名。应该在脚本中添加什么?!完整路径是“D:\Site Information\HBOC\Cen As Install Files\CenASintstall_4.0(DS-70-026-W).exe”

:opt1
for /f "tokens=*" %%a in ('dir "D:\Site Information" /s /b ^| find "(%pc%).exe"') do echo "Option1 is %%~dpa"
REM  D:\Site Information\HBOC\Cen As Install Files\

:opt2
for /f "tokens=* delims=\" %%a in ('dir "D:\Site Information" /s /b ^| findstr "(%pc%).exe"') do echo "Option2 is %%~dpa"
REM  D:\Site Information\HBOC\Cen As Install Files\

:opt3
for /f %%a in ('dir "D:\Site Information" /s /b ^| find "CenASintstall_4.0(%pc%).exe"') do echo "Option3 is %%~dpa"    
REM Result is D:\

:opt3A
for /f %%a in ('dir "D:\Site Information" /s /b ^| find "(%pc%).exe"') do echo "Option3A is %%~dpa"    
REM Result is D:\


:opt4
for /f "tokens=* delims=\" %%a in ('dir "D:\Site Information" /s /b ^| find "(%pc%).exe"') do echo "Option4 is %%~dpa"
REM  D:\Site Information\HBOC\Cen As Install Files\

:opt5
for /f "tokens=* delims=\" %%a in ('dir "D:\Site Information" /s /b ^| findstr "(%pc%).exe"') do echo "Option5 is %%~dpa"
REM  D:\Site Information\HBOC\Cen As Install Files\
    
:opt6
for /f "tokens=* delims=\" %%a in ('dir "D:\Site Information" /s /b ^| findstr "CenASintstall_4.0(%pc%).exe"') do echo "Option6 is %%~dpa"
REM  D:\Site Information\HBOC\Cen As Install Files\

在此处输入图片描述

修订版 2

修改后的脚本

for /f %%a in ('dir "D:\Site Information" /s /b ^| find "CenASintstall_4.0(%pc%)"') do echo "Option3B is %%~dpa%%~a"

在此处输入图片描述

修订 3

set user=USER
set /p "pc=Enter Computer Name : " 
goto pcname


:pcname
REM Locate the Drive contains the folder-"Site Information"
set mydrive=NOT_FOUND
for /f "skip=1" %%G in ('wmic logicaldisk get name') do (
    if exist "%%G\Site Information" set mydrive=%%G
    )
echo Possible USB Drive is %mydrive%  
if %mydrive%==NOT_FOUND (goto nas) else (goto check)
   

:check
REM Locate the executable file with full path
set pathdrive=NOT_FOUND
for /f "tokens=* delims=\" %%a in ('dir "%mydrive%" /s /b ^| find /i "(%pc%).exe"') do set "pathdrive=%%~dpnxa"
 echo. The file path is %pathdrive%
if "%pathdrive%"=="NOT_FOUND" (goto nas) else (goto extract)

屏幕截图 4

在此处输入图片描述

答案1

您的脚本存在一些问题,可能会导致它无法按预期工作。

首先,在 for 循环中,您使用 findstr 搜索包含用户输入的计算机名称的文件名。但是,findstr 仅在文件内搜索字符串,而不会搜索文件名。相反,您可以使用 find 命令来搜索文件名。

下面是一个示例,说明如何修改脚本以搜索具有部分名称的文件并打印完整路径:

    @echo off
Setlocal EnableDelayedExpansion

set /p "pc=Enter Computer Name : "

for /f %%a in ('dir "D:\Site Information" /s /b ^| find "CenASintstall_4.0(%pc%)"') do echo %%~dpa 

此脚本将在目录“D:\Site Information”及其所有子目录中搜索名称包含字符串“CenASintstall_4.0”且后跟用户输入的计算机名称的文件。如果找到文件,它将打印该文件的完整路径。

编辑 1 如果您还想包含文件名,您可以使用以下命令:

@echo off
set /p "pc=Enter computer name: "
for /f %a in ('dir "D:\Site Information" /s /b ^| find "CenASintstall_4.0(%pc%)"') do echo %~dpa%%~a

我希望这有帮助!

答案2

您可以尝试添加这个:

for /R "D:\Site Information" %%A in ("CenASinstall*.exe") do (echo Found, path is %%A)

如果您想搜索包含计算机名称的可执行文件,请尝试:

for /R "D:\Site Information" %%A in ("CenASinstall*(%computername%).exe") do (echo Found, path is %%A)

让我知道它是否有效![抱歉,如果这不是你想要的,但我首先需要有 50 个声誉才能发表评论和寻求澄清 :( ]

编辑:刚刚尝试过,它们似乎有效[查看截图]

截屏

我创建了相同的文件夹树,看起来不错。

如果您不理解某些内容或者我解释得不好(我肯定是这样的,哈哈),请发表评论。

补充说明

您可能想知道为什么在第二个命令中我没有("CenASinstall*(%computername%).exe")简单地执行("CenASinstall_4.0(%computername%).exe"):我添加了星号,因为 FOR /R 命令仅在“目标文件名”包含一个或多个空白字符时才有效。通过添加星号,您表示需要检索“CenASinstall”和“(%computername%).exe”之间的所有内容。通过保留文件名的空白部分(在本例中是版本号),您基本上是在要求 FOR 检索它。(使用这个小技巧,您可以使命令正常工作。最重要的是,您还可以完成仅扫描包含“CenASinstall”字符串和计算机名称的文件名的任务。)

您不一定需要使用命令询问用户计算机名称set /p pc=enter the name,因为它已经存储在%computername%变量中。但如果您需要它,无论如何都要询问计算机名称并%computername%用该名称替换变量%pc%

第一个命令将搜索所有包含“CenASinstall”字符串的文件名,第二个命令将仅搜索所有包含“CenASinstall”字符串和计算机名称的文件名。

在我创建的用于尝试命令的树中,我完全忘记添加大写字母和其他东西,但我编辑了命令并修复了所有内容。

可执行文件的完整路径存储在 中%%A,您可以通过执行echo %%A或 来检索它,以使其永远存在echo %%A>>somefilename.txt

相关内容