繁体   English   中英

Windows批处理| 带参数的for循环和dir命令

[英]windows batch | for loop and dir command with parameter

工作命令-直接粘贴在命令外壳中:

for /f %a in ('dir /b /s ..\*') do @echo %~na | findstr transport_bb_*_*_* | sort

问题1)从.bat文件执行的同一命令导致错误:

| was unexpected at this time.

问题2)此外,希望上述.bat文件接受参数(目录):

for /f %a in ('dir /b /s %1\..\*') do @echo %~na | findstr transport_bb_*_*_* | sort

试过撇号,“重音符”,双精度百分数,使用SET将整个命令放在括号内,仍然无效。

帮助表示赞赏。

谢谢,巴特

广告1)在批处理文件中,您必须将% -> %%翻倍。 管道| 您将不得不替换为工作流程:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "delims=" %%A in ('dir /B /S ..\*') do (
    echo %~nA
    set "search_in_file=%%A"
    findstr transport_bb_*_*_* !search_in_file! | sort
)

广告2)接受用户输入

@echo off
SETLOCAL  ENABLEDELAYEDEXPANSION
SET "input=%~1"
SET "search_in_dir=!input!\*"

   for /F "delims=" %%A in ('dir /B /S !search_in_dir!') do (
        REM echo %%~nA
        set "search_in_file=%%A"
        REM ECHO findstr "transport_bb_*_*_*" "%search_in_file%"
        findstr "transport_bb_*_*_*" "!search_in_file!"
        IF ERRORLEVEL 1 (
           ECHO "String NOT found in file !search_in_file!"
        ) ELSE (
           ECHO ""String found in file !search_in_file!"
        )
    )

或更像您的脚本:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "input=%~1"
SET "search_in_dir=!input!\*"

   for /F "delims=" %%A in ('dir /B /S !search_in_dir!') do (
        set "search_in_file=%%A"
        findstr /M "transport_bb_*_*_*" "!search_in_file!" | sort
    )

笔记:

其中findstr参数:

/M         Prints only the filename if a file contains a match.

%~1 ...接受第一个用户参数并将其扩展
!....! 现在,由于启用了SETLOCAL ENABLEDELAYEDEXPANSION因此SETLOCAL ENABLEDELAYEDEXPANSION了一个变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM