我正在编码一个批处理文件,该文件应在两个文件夹路径中搜索多个文件扩展名,并将它们列出在文本文件中。目前,我正在尝试使用FOR循环以及文件扩展名列表(* .doc,*。docx等)。我认为该文件因“ *”字符而出错,但我不知道如何解决此问题。
我尝试直接列出它们:FOR %%G IN (*.one,*.mht,*.onepkg)
。我尝试使用引号:FOR %%G IN ("*.one","*.mht","*.onepkg")
。我试过了插入符号:FOR %%G IN (^^*.one,^^*.mht,^^*.onepkg)
。
这是我的代码:
set outputfilepath=d:\output.txt
FOR %%G IN ("*.one","*.mht","*.onepkg") DO (
echo Searching for %%G files
dir "C:\%%G" /s /b >> "%outputfilepath%"
Rem Add 2 blank lines between next search
echo. >> "%outputfilepath%"
echo. >> "%outputfilepath%" )
没有任何输出到我的文本文件。
感谢您的帮助。
答案 0 :(得分:0)
@ECHO Off
SETLOCAL
set "outputfilepath=u:\output.txt"
(
FOR %%G IN (one,mht,onepkg) DO (
echo Searching for %%G files>con
dir ".\*.%%G" /s /b |FINDSTR /i /e /L ".%%G"
Rem Add 2 blank lines between next search
echo.
echo.
)
)> "%outputfilepath%"
GOTO :EOF
请注意,我已经更改了驱动器名称以适合我的系统。
只需扩展列表中的meta ,然后在*
命令中添加dir
。使用dir
过滤findstr
输出,以确保仅显示与文字/e
结尾/L
末尾的".%%G"
匹配的名称。
也可以通过将enitre for
命令括在括号中,将所有stdout
文本(通常会出现在控制台上)发送到文件。 >
自然意味着重新创建文件。 >>
(如果您愿意)进行追加。
附加到>con
Searching...
的{{1}}会覆盖重定向,并专门将文本从该echo
发送到控制台。
答案 1 :(得分:0)
我真的很喜欢现有的建议,但这是另一种方法。我发现这种样式更像是代码。
这似乎很复杂 但是 ...
这对于某些人来说可能更容易,而对于另一些人来说则太复杂了。
@echo off
:: The parameters we are working with...
set outputfilepath=d:\output.txt
set starting_path=c:\
set search_types="*.one" "*.mht" "*.onepkg"
pushd "%starting_path%"
call :enumerate_search_types %search_types%
popd
goto :EOF
:: ---------------------------------------------------------------
:enumerate_search_types
set "current_param=%~1"
if "%current_param%"=="" goto :EOF
call :search_for_search_type "%current_param%"
shift /1
goto :enumerate_search_types
:: ---------------------------------------------------------------
:search_for_search_type
set "current_search_type=%1"
set "had_output=false"
echo Searching for %current_search_type% files
for /f "delims=" %%f in ('dir /s /b %current_search_type% 2^>NUL') do set had_output=true&& echo %%f >> "%outputfilepath%"
:: If the dir command didn't produce anything, don't add the blank lines
if "false"=="%had_output%" goto :EOF
echo. >> "%outputfilepath%"
echo. >> "%outputfilepath%"
goto :EOF
答案 2 :(得分:0)
如果仅引用文件扩展名,则简短回答。 为了在for循环中使用其他扩展名:
FOR %%G IN (one,mht,onepkg) do [command]