【问题标题】:Batch file: list all folders containing only a file entitled "Thumbs v0.1.db"批处理文件:列出仅包含名为“Thumbs v0.1.db”的文件的所有文件夹
【发布时间】:2023-03-30 06:00:01
【问题描述】:

我需要扫描驱动器并列出所有文件夹,其中只包含一个名为“Thumbs v0.1.db”的文件。我拼凑了以下代码,但它似乎不起作用。批处理文件要么过早退出,要么在没有列出任何此类子目录的情况下完成!如果有人能指出问题,我将非常感激。

@echo off

SET /P folder="Please enter root directory to seach in: "

SET writefile="C:\Users\MYNAME\Desktop\Thumbs.txt"

SET tmp="C:\Users\MYNAME\Desktop\rowcounttmp"


Echo Searching for directories, please wait...

echo Thumbs v0.1.db-only directories in %folder% > %writefile%


cd /D %folder%
for /d /r %1 %%A in (.) do (

  dir /a /b "%%~fA" 2>nul | find /c /v "~StringWhichWillNotAppear~" > %tmp%

  set var=<%tmp%

  if [%var%] == 1  dir /a /b "%%~fA" 2>nul | findstr /i "Thumbs v0.1.db" >nul && echo %%~fA >> %writefile%

)

del %tmp%

Pause

谢谢

编辑:

感谢@peter-wright,我现在有了这个:我是否错误地执行了他的建议?某些文件路径(特别是我试图扫描的只读驱动器)似乎崩溃了,但仍然没有结果出现。

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

Color 0A

SET /P folder="Please enter root directory to seach in: "

SET writefile="C:\Users\MYNAME\Desktop\Thumbs.txt"

SET tempfile="C:\Users\MYNAME\Desktop\rowcounttmp"


Echo Searching for directories, please wait...

echo Thumbs v0.1.db only directories in %folder% > %writefile%


cd /D %folder%
for /d /r %1 %%A in (.) do (


  dir /a /b "%%~fA" 2>nul | find /c /v "~StringWhichWillNotAppear~" > %tempfile%

  set var=<%tempfile%

  if !var! == 1 dir /a /b "%%~fA" 2>nul | findstr /i "Thumbs v0.1.db" >nul && echo %%~fA >> %writefile%

)

del %tempfile%

Pause

【问题讨论】:

    标签: command-line batch-file directory subdirectory


    【解决方案1】:

    变量var 被设置在一个BLOCK(括号内的一系列语句)中。

    一个块中的任何%var% 都会在块被解析时替换为var 的值,而不是在它被执行时。

    要访问 var 的 RUN-TIME 值,请在调用 delayedexpansionSETLOCAL ENABLEDELAYEDEXPANSION 语句后使用 !var!(最好在 @echo on 之后立即实施。

    Danger, Will Robinson:不要使用 tmp 作为变量名 - tmp 是一个 magic variable,对批处理有特殊意义。其他的可以通过调用列出

    设置

    根据提示。还要避免 DATE、TIME、RANDOM、CD 和其他一些。而且使用可执行文件名称或批处理关键字也不是一个好主意......

    提示:

    尝试使用

    FOR /F "delims=" %%i in ('dir /s /a /b /a-d "Thumbs v0.1.db" ') do (
    

    然后 %%~dpi 将被分配包含目标文件的目录的名称。如果这些目录中的文件数不是 ==1,那么它并不孤单......

    【讨论】:

    • 非常感谢您的帮助,我没有考虑何时可以将变量替换为它们的值。 (我对批处理文件很陌生!)但是,它似乎仍然不起作用;当我知道应该有结果时,文本文件中没有返回结果!还有什么想法吗? (修改后的代码现在有问题了)
    • 更新:抱歉,某些文件路径(特别是我试图扫描的只读驱动器)似乎崩溃了,所以错误似乎仍然存在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多