windows - Er der en måde at ekskludere bestemte værdier/variabler fra et wildcard i en for loop

Indlæg af Hanne Mølgaard Plasc

Problem



for /d \%\%A IN (u:mainfolder*) DO if not exist "\%\%A\%var1\%" mkdir "\%\%Asubfolder"


Jeg vil ekskludere bestemte mapper i mappen u: \ mainfolder \ så mkdir kører på alle, men et par af mapperne der. Er der mulighed for at udelukke bestemte mapper, der er givet ved brug af wildcard?

Bedste reference


Hvis du kun har 2 eller 3 for at udelukke dig, kan du gøre noget som dette.


for /d \%\%A IN (u:mainfolder*) DO if /i not "\%\%A"=="u:mainfolderName1ToExclude" if /i not "\%\%A"=="u:mainfolderName2ToExclude" if not exist "\%\%A\%var1\%" mkdir "\%\%Asubfolder"


Ellers, hvis du har mere, vil du sandsynligvis bruge en tabel med navne for at udelukke.

Andre referencer 1


Kommandoen FOR understøtter ikke en ekskluderingsindstilling.


Men opgaven kan opnås ved hjælp af kommandoer DIR og FINDSTR henrettet af FOR .


@echo off
set "MainFolder=U:mainfolder"
for /F "delims=" \%\%A in ('dir "\%MainFolder\%*" /AD /B ^| \%SystemRoot\%System32findstr.exe /E /I /L /V /X /C:"Exclude Folder 1" /C:ExcludeFolder2 /C:FolderToExclude3 2^>nul') do if not exist "\%MainFolder\%\%\%A\%var1\%" mkdir "\%MainFolder\%\%\%Asubfolder"
set "MainFolder="


Kommandoen DIR udføres kun for at udstede mapper i mappen angivet med miljøvariabel MainFolder på grund af indstillingerne /AD (attributkatalog) og /B (bare format) . Mappenavne udgives af DIR uden sti, kun mappens navne.


Udgangen af ​​ DIR ledes som input til FINDSTR ved hjælp af omdirigeringsoperatør |.


FINDSTR søger i alle linjer for en af ​​de strenge, der er angivet med mulighed /C som bogstavstreng på grund af valgmulighed /L, ikke vedlagt i dobbelt citater eller vedlagt i dobbelt citater på grund af katalognavn indeholder et mellemrum eller et af disse tegn: &()[]{}^=;!'+,`~


Søgningen er uhensigtsmæssig på grund af indstilling /I.


En kamp er kun positiv, hvis indtastningslinjen passer helt sammen med en søge streng på grund af /X, hvilket betyder, at hele katalognavnet skal matche helt sammen med en af ​​søgeforbindelserne.


Alternativet /V resulterer i en omvendt output af FINDSTR . I stedet for at udskrive linjerne, der passer til en af ​​søgeforbindelserne, udskriver den linjerne (= katalognavne), som ikke matcher nogen af ​​søgeforbindelserne.


De filtrerede katalognavne uden sti behandles line for line af FOR .


Omdirigeringsoperatørerne | og > skal undslettes med karet karakter ^ i den endeligt udførte kommandolinje:


dir "U:mainfolder*" /AD /B | C:WindowsSystem32findstr.exe /E /I /L /V /X /C:"Exclude Folder 1" /C:ExcludeFolder2 /C:FolderToExclude3 2>nul


Denne kommandolinje udføres af FOR i en separat kommandoproces, der startes i baggrunden. Omdirigeringsoperatørerne | og > skal undslippes med ^ for at blive fortolket som bogstavkarakterer ved at analysere hele FOR kommandolinjen ved hjælp af Windows kommandotolk før udførelse af kommando FOR med resten af ​​linjen.


På en længere liste over mapper til udelukkelse foreslår jeg at skrive katalognavne i en almindelig tekstfil og brug indstillingen /G: af FINDSTR i stedet for at angive dem alle med /C: på kommando linje.


For at forstå de anvendte kommandoer og hvordan de virker, skal du åbne et kommandopromptvindue, udføre de følgende kommandoer, og læs helt alle hjælpesider, der vises for hver kommando, meget omhyggeligt.



  • dir /?

  • echo /?

  • findstr /?

  • for /?

  • set /?



Læs også Microsoft-artiklen om brug af kommandoredirection-operatører. [28]