Command line 批处理文件:列出仅包含名为“文件”的文件的所有文件夹;拇指v0.1.db“;
我需要扫描一个驱动器,列出所有只包含一个文件的文件夹,名为“Thumbs 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
@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,那么这并不是唯一的…非常感谢您的帮助,我没有考虑何时可以将变量替换为它们的值。(我对批处理文件非常陌生!)但是,它似乎仍然不起作用;当我知道应该有结果时,文本文件中不会返回任何结果!有进一步的想法吗?(修订后的代码现在有问题)更新:抱歉,某些文件路径(特别是我试图扫描的只读驱动器)似乎会崩溃,因此错误似乎仍然存在?