2010-04-23 91 views
4

我正在尝试创建一个文件,其中包含具有特定文件名的目录。Windows批处理文件列出其中有特定文件的文件夹

比方说,我试图找到其中有一个名为*.joe的文件的目录。我最初尝试了一个简单的dir /ad *.joe > dir_list.txt,但它搜索的目录名称为*.joe,所以不行。

然后我得出结论,for循环可能是我最好的选择。我开始于

for /d /r %a in ('dir *.joe /b') do @echo %a >> dir_list.txt 

它看起来好像没有执行dir命令。我添加了“usebackq”,但似乎只适用于/ F命令扩展。

想法?

回答

0

dir /s/b *.joe >> dir_list.txt然后在例如, GAWK的dirnames中

4

后摆脱了名的。由于“dir /s /b file_name”不剪,怎么样以下

for /d /r %a in (*) do @if exist %a\*.scr (echo %a) 

这样看来,一个批次内的文件,该文件必须是唯一esaped是search.bat或(别的东西,你可以记住)赐

for /d /r %%a in (*) do @if exist %%a\*.scr (echo %%a) 
+0

不是*完全*他在找什么,而是+1,因为它是迄今为止最简单的问题解决方案。一个简单的REPLACE(“file_name”,“”)事后会给你想要的输出 - 在BAT文件中做到这一点的任何方式? – SqlRyan 2010-04-23 18:06:14

+0

在使用之前我意识到我只需要目录名而不需要文件名;那就是当我开始试验dir/ad时,我只是从那里向下盘旋...... – Lee 2010-04-23 18:41:18

+0

@ Lee:感谢你用我的方式打磨你的下坡spriral;)希望我的编辑能够结束它。 – torak 2010-04-23 19:06:45

1

保存此%

@echo off 
setlocal EnableDelayedExpansion 
set last=? 

if "%1" EQU "" goto usage 

for /f %%I in ('dir /s /b /o:n /a-d "%1"') do (
    if !last! NEQ %%~dpI ( 
    set last=%%~dpI 
    echo !last! 
) 
) 
goto end 

:usage 
echo Please give search parameter. 

:end 

和使用方法如下:

search.bat *.joe >dir_list.txt 

注意,它目前的路径范围内搜索。您可能需要将.bat添加到PATH中的位置,以便您可以从任何位置调用它。

+1

这个工程 - 但我不知道它在做什么。 – Lee 2010-04-23 19:40:36

+0

@Lee:这是'dir'命令返回的每一行的'for'循环,这个部分应该是清楚的,然后使用'last'变量来比较每一行和之前的行。当它们不同时,它会打印该行。这样只有唯一的行被打印。阅读'for /?'来找出'%〜dpI'的含义。搜索StackOverflow或Google搜索“EnableDelayedExpansion”的含义。 ;) – Tomalak 2010-04-23 20:00:40

1

这将打印的目录和文件名,可能会或可能不会对你有帮助:

dir /b /s | findstr "\.joe" 

findstr使用正则表达式。

相关问题