windows - Kør kommando på flere undermapper på cmd

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har mange kurser i undermapper, som jeg har downloadet under (C:Users[username]AppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_courses), og jeg vil køre denne kommando på alle undermapper under ldc\_dl\_courses, men jeg har nogle problemer med at oprette en batchfil til at køre den.


LyndaDecryptor /D “C:Users[username]AppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_courses143455” /DB “C:Users[username]AppDataLocallynda.comLynda.com Desktop Appdb.sqlite” /OUT “C:Users[username]AppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_coursesmp4”


Jeg prøvede dette, men det virkede ikke


FOR /D \%G IN ("C:UserssalahAppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_courses") DO LyndaDecryptor /D "C:UserssalahAppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_courses\%G" /DB "C:UserssalahAppDataLocallynda.comLynda.com Desktop Appdb.sqlite" /OUT "C:UserssalahAppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_coursesmp4" 

Bedste reference


Jeg foreslår at bruge følgende batchfil til denne opgave:


@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LyndaAppFolder=\%LocalAppData\%lynda.comLynda.com Desktop App"
set "CoursesFolder=\%LyndaAppFolder\%offlineldc\_dl\_courses"
for /D \%\%I in ("\%CoursesFolder\%*") do if /I not "\%\%I" == "\%CoursesFolder\%mp4" LyndaDecryptor.exe /D "\%\%I" /DB "\%LyndaAppFolder\%db.sqlite" /OUT "\%CoursesFolder\%mp4"
endlocal


Det er uklart for mig, hvis mp4 i kurser mappe er en mappe eller fil. Jeg antager, at det er en mappe, der skal springes over, når du behandler alle ikke-skjulte undermapper i kurser mappe, hvilket er årsagen til den ekstra tilfældige IF betingelse.


Kommandoen FOR søger på grund af /D for ikke-skjulte mapper i den specificerede mappe, der matcher wildcard-mønsteret * og tildeler navnet på et fundet mappe med fuld sti uden omkringliggende dobbelt citater til loop variabel I. Navnet på en fundet mappe vil blive tildelt loop-variabel I uden vej, hvis bare * ville blive brugt i runde parentes på grund af den nuværende mappe, er mappen indeholdende kursusmapper.


Jeg antager, at LyndaDecryptor er en eksekverbar med filtypen .exe og vedhæftet filudvidelsen på sidste men en kommandolinje. Det bedste ville være at specificere LyndaDecryptor med fuld sti og med filtypen som i dette tilfælde har Windows-kommandotolk ikke søgt efter et eksekverbart eller script med det filnavn på hver iteration af sløjfen.


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.



  • echo /?

  • endlocal /?

  • for /?

  • if /?

  • set /?

  • setlocal /?



Se også Wikipedia-artikel om Windows Miljøvariabler for foruddefineret miljøvariabel LOCALAPPDATA, der bruges i batchfilen ved hjælp af CamelCase-notation, for bedre læsbarhed som miljøvariabler, er ikke sårfølsomme på Windows i forhold til FOR loop variabler, som er case-sensitive. [22]

Andre referencer 1


FOR /D \%G IN ("C:Users[u]AppDataLocallynda.comLynda.com Desktop Appofflineldc\_dl\_courses*") DO LyndaDecryptor /D "\%G" /DB "C:Users[u]AppDataLocallynda.comLynda.com Desktop Appdb.sqlite" /OUT "C:Users[u]AppDataLocallynda.comLynda.com Desktop Appofflinemp4"


Dette er den følgende arbejdsløsning