无忧启动论坛

标题: 怎么用bat脚本搜索各分区根目录特定文件名的文件 [打印本页]

作者: 1G空间100元    时间: 5 天前
标题: 怎么用bat脚本搜索各分区根目录特定文件名的文件
本帖最后由 1G空间100元 于 2024-11-30 13:45 编辑

怎么用bat脚本搜索各分区根目录特定文件名的文件,并提取该文件的完整路径,全盘只有一个唯一文件名,而且放根分区,没放文件夹内,但是不清楚放哪个分区中,只需要提取这个文件的所在分区的盘符或完整路径,不需要查看文件的内容
假设这里的文件名为baiduseo.txt

只用搜索各分区的根目录 不需要搜索文件夹和其子目录
因为文件名具有唯一性 搜索到一个文件后 就不需要再继续搜索

作者: winpefk    时间: 5 天前
本帖最后由 winpefk 于 2024-11-30 14:07 编辑

你可以尝试一下find for windows,bash for windows,然后一个bash脚本:
for i in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do

    find $i: -d1 -name "name_of_file"
done


作者: 1G空间100元    时间: 5 天前
本帖最后由 1G空间100元 于 2024-11-30 14:19 编辑

AI回答了但是这个脚本执行有问题:

@echo off
setlocal enabledelayedexpansion

set "filename=baiduseo.txt"
set "found="

for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    if exist %%d:\ (
        if exist %%d:\%filename% (
            set "found=%%d:\%filename%"
            goto :found
        )
    )
)

:notfound
echo 文件 %filename% 在任何分区的根目录中未找到。
goto :eof

:found
echo 文件 %filename% 位于:!found!
goto :eof

:eof
pause




作者: 1G空间100元    时间: 5 天前
脚本说明:
‌设置变量‌:

filename 变量存储你要查找的文件名(baiduseo.txt)。
found 变量用于存储找到的文件的完整路径。
‌遍历磁盘分区‌:

使用 for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) 循环遍历从C到Z的所有可能分区。
if exist %%d:\ 检查分区是否存在。
if exist %%d:\%filename% 检查该分区的根目录中是否存在指定的文件。
‌找到文件‌:

如果找到文件,将文件的完整路径存储在 found 变量中,并跳转到 :found 标签。
在 :found 标签下,输出找到的文件的路径,并使用 goto :eof 结束脚本。
‌未找到文件‌:

如果遍历所有分区后仍未找到文件,跳转到 :notfound 标签,输出未找到文件的消息,并使用 goto :eof 结束脚本。
将上述脚本保存为 .bat 文件(例如 search_file.bat),然后双击运行它。脚本会遍历各个分区的根目录,查找名为 baiduseo.txt 的文件,并在找到后立即输出其路径并退出。
作者: wangyibin    时间: 5 天前
本帖最后由 wangyibin 于 2024-11-30 14:24 编辑

Grok-Beta 模型 回答 请自行验证!

  1. @echo off
  2. setlocal enabledelayedexpansion

  3. REM 定义要搜索的文件名
  4. set "filename=baiduseo.txt"

  5. REM 定义一个变量来存储找到的文件路径
  6. set "foundfile="

  7. REM 获取所有驱动器列表
  8. for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "DriveType=3" get DeviceID /value') do (
  9.     set "drive=%%i"
  10.     if exist "!drive!%filename%" (
  11.         set "foundfile=!drive!%filename%"
  12.         echo 文件已找到: !foundfile!
  13.         goto :end
  14.     )
  15. )

  16. :end
  17. if defined foundfile (
  18.     echo %foundfile%
  19. ) else (
  20.     echo 文件未找到。
  21. )

  22. endlocal
复制代码

作者: 1G空间100元    时间: 5 天前
本帖最后由 1G空间100元 于 2024-11-30 14:34 编辑
wangyibin 发表于 2024-11-30 14:23
Grok-Beta 模型 回答 请自行验证!

好像不行 明明我将baiduseo.txt放于G盘根目录
搜索不到,另外有些系统已经没有wmic,用这个命令也不通用

作者: wangyibin    时间: 5 天前
GPT-4o 模型 回答 加入 不使用 wmic 命令 请自行验证

  1. @echo off
  2. setlocal enabledelayedexpansion

  3. :: 定义要搜索的文件名
  4. set filename=baiduseo.txt

  5. :: 获取所有磁盘驱动器盘符
  6. for /f "tokens=2 delims=" %%d in ('fsutil fsinfo drives') do (
  7.     set drive=%%d
  8.     echo Searching drive !drive!\

  9.     :: 搜索该分区根目录下是否有目标文件
  10.     dir !drive!\%filename% /a /b >nul 2>&1
  11.     if not errorlevel 1 (
  12.         echo File found: !drive!\%filename%
  13.         exit /b
  14.     )
  15. )

  16. echo File not found.
  17. endlocal
复制代码


解释:

使用方法:

额外注意事项:

作者: yigeren    时间: 5 天前
@echo off
for %%a in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do if exist "%%a:\baiduseo.txt" set panfu=%%a:
echo %panfu%
pause
作者: hao_daidfy    时间: 5 天前
学习一下!
作者: lsw13227    时间: 5 天前
纯bat就好吧
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "%%i:\baiduceo.txt" (set "vol=%%i:"))
echo %vol%&pause


作者: wn168cn@163.com    时间: 5 天前
学习了
作者: yyz2191958    时间: 5 天前
wangyibin 发表于 2024-11-30 14:23
Grok-Beta 模型 回答 请自行验证!

助人为乐
作者: yyz2191958    时间: 5 天前
lsw13227 发表于 2024-11-30 16:12
纯bat就好吧
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "% ...

好人
作者: 2012雨晨绿软    时间: 5 天前
本帖最后由 2012雨晨绿软 于 2024-12-1 11:54 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:" for /f "delims=" %%i in ('dir /b /s /a-d "%%a:\*.txt"^|find /i "baiduseo"') do set "filespth=%%i"
  4. echo.
  5. echo   %filespth%
  6. pause
  7. exit
复制代码

测试.7z (41.19 KB, 下载次数: 5)






作者: 1G空间100元    时间: 5 天前
lsw13227 发表于 2024-11-30 16:12
纯bat就好吧
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "% ...

会提示:ECHO 处于关闭状态
作者: 青青草    时间: 5 天前
  1. @echo off
  2.   for /f "tokens=1* delims=: " %%1 in (' fsutil.exe fsinfo drives^|find ":" ') do set "dl=%%2"
  3.    set "dl=%dl::\=%"
  4. for %%a in ( %dl% ) do if exist "%%a:\baiduseo.txt" set panfu=%%a:
  5. echo %panfu%
  6. pause
  7. exit /b
复制代码

作者: yyz2191958    时间: 4 天前
青青草 发表于 2024-11-30 23:29

助人为乐
作者: guong    时间: 4 天前
来了解一下
作者: 2012fengxi    时间: 4 天前
学习一下
作者: 2012雨晨绿软    时间: 4 天前
先建一个记事本文件,将内容复制进去,保存并关闭,修改扩展名TXT为CMD,然后双击运行即可
作者: 2012雨晨绿软    时间: 4 天前
给你强化了一下,只搜索存在的分区
作者: 2012雨晨绿软    时间: 4 天前
青青草 发表于 2024-11-30 23:29

在我的电脑上执行只会显示ECHO 处于关闭状态,另外感觉我发的代码更简单明了
作者: lsw13227    时间: 4 天前
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "%%i:\baiduceo.txt" (set "vol=%%i:"))
echo %vol%&pause
以上代码,当各盘都不存在baiduceo.txt时vol未赋值所以显示echo关闭状态,当有多个盘中存在baiduceo.txt时会取最后一个盘,如果想取第一个搜到的盘可以 用goto跳转。例:
@echo off
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "%%i:\baiduceo.txt" (set "vol=%%i:"&goto :_test))
if "%vol%"=="" echo 没有一个盘中存在baiduceo.txt&pause
:_test
echo %vol%&pause
作者: 青青草    时间: 4 天前
本帖最后由 青青草 于 2024-12-1 19:50 编辑
2012雨晨绿软 发表于 2024-12-1 12:34
在我的电脑上执行只会显示ECHO 处于关闭状态,另外感觉我发的代码更简单明了

哪是因为你的电脑各分区根目录下没有文件 baiduceo.txt
另外,我的代码还有查找电脑所有可用盘符的功能。
完整版如下:
  1. @echo off
  2.   for /f "tokens=1* delims=: " %%1 in (' fsutil.exe fsinfo drives^|find ":" ') do set "dl=%%2"
  3.    set "dl=%dl::\=%"
  4. echo 我的电脑所有可用盘符:%dl%
  5. for %%a in ( %dl% ) do if exist "%%a:\baiduseo.txt" set panfu=%%a:
  6. if "%panfu%" NEQ ""  echo 存在文件的位置为  %panfu%\
  7. if "%panfu%"=="" echo 各分区根目录下没有文件 baiduceo.txt
  8. pause
  9. exit /b
复制代码








欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3