Command line 批处理文件:列出仅包含名为“文件”的文件的所有文件夹;拇指v0.1.db“;

Command line 批处理文件:列出仅包含名为“文件”的文件的所有文件夹;拇指v0.1.db“;,command-line,batch-file,directory,subdirectory,Command Line,Batch File,Directory,Subdirectory,我需要扫描一个驱动器,列出所有只包含一个文件的文件夹,名为“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:\U

我需要扫描一个驱动器,列出所有只包含一个文件的文件夹,名为“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
@echo关闭
SET/P folder=“请输入要搜索的根目录:”
SET writefile=“C:\Users\MYNAME\Desktop\Thumbs.txt”
SET tmp=“C:\Users\MYNAME\Desktop\rowcounttmp”
Echo正在搜索目录,请稍候。。。
echo Thumbs v0.1.db-仅在%folder%>%writefile%中的目录
cd/D%文件夹%
对于(.)do中的/d/r%1%%A(
dir/a/b“%%~fA”2>num | find/c/v“~StringWhichWillNotAppear~”>%tmp%
设置var=num | findstr/i“Thumbs v0.1.db”>num&&echo%%~fA>>%writefile%
)
删除%tmp%
暂停
谢谢

编辑:

多亏了@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
@echo关闭
SETLOCAL ENABLEDELAYEDEXPANSION
颜色0A
SET/P folder=“请输入要搜索的根目录:”
SET writefile=“C:\Users\MYNAME\Desktop\Thumbs.txt”
SET tempfile=“C:\Users\MYNAME\Desktop\rowcounttmp”
Echo正在搜索目录,请稍候。。。
echo Thumbs v0.1.db仅限于%folder%>%writefile%中的目录
cd/D%文件夹%
对于(.)do中的/d/r%1%%A(
dir/a/b“%%~fA”2>num | find/c/v“~StringWhichWillNotAppear~”>%tempfile%
设置var=num | findstr/i“Thumbs v0.1.db”>num&&echo%%~fA>>%writefile%
)
删除%tempfile%
暂停

变量
var
在一个块内设置(括号内的一系列语句)

当解析块时,而不是执行块时,块内的任何
%var%
都会被该
var
的值替换

要访问
var
的运行时值,请使用
!瓦尔SETLOCAL ENABLEDELAYEDEXPANSION
语句调用
delayedexpansion
后(最好在
@echo on
上立即执行)

危险,Will Robinson:不要将
tmp
用作变量名-
tmp
是对批处理具有特殊意义的
魔术变量。其他变量可通过调用

设置

也要避免日期、时间、随机数、CD和其他一些。使用可执行文件名或批处理关键字也不是一个好主意

提示:

试用

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

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

非常感谢您的帮助,我没有考虑何时可以将变量替换为它们的值。(我对批处理文件非常陌生!)但是,它似乎仍然不起作用;当我知道应该有结果时,文本文件中不会返回任何结果!有进一步的想法吗?(修订后的代码现在有问题)更新:抱歉,某些文件路径(特别是我试图扫描的只读驱动器)似乎会崩溃,因此错误似乎仍然存在?