0

我需要扫描驱动器并列出仅包含一个文件的所有文件夹,该文件名为“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
4

1 回答 1

1

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

块中的任何内容都被解析时%var%的值替换var,而不是执行时的值。

在使用语句调用之后访问varuse的 RUN-TIME 值(最好在.!var!delayedexpansionSETLOCAL ENABLEDELAYEDEXPANSION@echo on

Danger,Will Robinson:不要tmp用作变量名——对批处理有特殊意义tmpmagic variable其他人可以通过调用列出

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

小费:

尝试使用

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

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

于 2013-07-18T15:41:16.243 回答