Windows-batchfilkommandoer og variabler

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ikke sikker på, om det er muligt, men det jeg har brug for er en almindelig flagermus/cmd-fil, der kører på Windows 7 og gør sådanne ting:


Trin 1. findstr - det skal finde en bestemt streng ved hjælp af regulære udtryk motor. Antag, at vi leder efter et nummer, der er vedhæftet med tags <id>123</id> (antag en sådan fil er unik, så en værdi returneres). Kommandoen vil udskrive 123 til skærmen, men jeg skal gemme den i en variabel (ved ikke hvordan).


Trin 2. Et andet kald til findstr på en anden mappe. Nu ønsker vi at finde en fil NAME (/m mulighed), der indeholder den værdi, vi lagrede i trin 1 (i en anden gruppe af filer, dvs. en anden mappe). Og igen, gem resultatet (navn på filen) i en variabel. Sig, file\_123.txt svarer til kriterierne.


Trin 3. Kopier filen, som vi fik som følge af det andet findstr opkald (file\_123.txt) til et andet sted.



Hele spørgsmålet drejer sig om, hvordan man gemmer resultatet af Windows-kommandoer til variabler for at kunne levere disse værdier til efterfølgende kommandoer som parametre.


Bedste reference


Den generelle måde at få kommando output i variabler er


for /f \%\%x in ('some command') do set Var=\%\%x


(med forskellige variationer afhængigt af kontekst og hvad der er ønskeligt).


Hvad angår dine trin, uddyber jeg efter frokost. Der er nogle komplicationer.

Andre referencer 1


Trin 1:


FOR /F "USEBACKQ tokens=1-20 delims=<>" \%\%A in (`FINDSTR "123" "path of file to search in"`) DO (
 SET var=\%\%B
)

ECHO \%var\%


Forstå, at delims vil ændre sig afhængigt af, hvad 'adskiller' dele af output (hvad enten det er et mellemrum, et specialtegn osv.)


Trin 2 & 3:


FOR /F "USEBACKQ tokens=*" \%\%A IN (`DIR "Path" /A ^| FIND /I "\%var\%"`) DO (
 COPY /Y "\%\%A" "C:NewPath\%\%~nxA"
)