windows batch | for loop og dir kommando med parameter

Indlæg af Hanne Mølgaard Plasc

Problem



Arbejdskommando - indsat direkte i kommandopanel:


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


Problem 1) Den samme kommando, der udføres fra en .bat-fil, resulterer i en fejl:


| was unexpected at this time.


Problem 2) Desuden vil den nævnte .bat-fil acceptere en parameter (katalog):


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


Forsøgte apostrofer, 'grav accenter', dobbelt procent, ved hjælp af SET for at sætte hele kommandoen indenfor parentes, stadig ingen effekt.


Hjælp værdsat.


Tak,
Bart

Bedste reference


annonce 1) I batchfil skal du fordoble \% -> \%\%. Rørene | skal du erstatte med workflow:


@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
)


Annonce 2) Indtast brugerindgang


@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!"
        )
    )


eller mere som dit script:


@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
    )


Bemærkninger:


Hvor findstr parameter:


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


\%~1 ... indtager første brugerparameter og udvider den

!....! afgrænser nu en variabel på grund af at SETLOCAL ENABLEDELAYEDEXPANSION er aktiveret.