Just nu i M3-nätverket
Gå till innehåll

Ms-dos programmering, byta namn på fil utifrån speciell rad i fil


Flyckten

Rekommendera Poster

Hej,

 

 

Behöver göra en ms-dos kommandofil (specifikt). Filen ska leta i en fil som är döpt blablabla.qan (går att öppna med anteckningar), hitta en text sträng på rad 2 i filen och sedan döpa om aktuell fil till det namnet med ändelsen .txt

 

 

Eftersom jag är helt rudis i dos programmering vet jag inte ens vart jag ska börja, känns däremot inte som något svårt problem.

 

 

 

Jag bifogar en fil för exempel, den rad jag vill att filen sedan döps till är koden efter "sample name", alltså 23148 i detta fall. Kommer vara mer än en 5 siffrig kod framöver, exempelvis kommer stå något liknande: "23148 TR045 01-08 130805"

 

Oerhört tacksam för hjälp!

 

 

 

 

Edit: Fick inte ladda upp .qan filer, men den har egentligen den filändelsen.

SuperQ.txt

Länk till kommentar
Dela på andra webbplatser

Efter ha googlat lite fick jag fram följande:

 

::==

@echo off

setLocal EnableDelayedExpansion

for /f "tokens=* delims= " %%a in (SuperQ.qan) do (

if !myvar!'==' set myvar=%%a

)

echo myvar is set to !myvar!

 

::==

 

 

Vilket tar rad 1 i SuperQ.qan och sätter den till variabeln myvar och sedan echoar den.

 

 

Begränsningar här som måste lösas: SuperQ.qan kommer ha olika namn, däremot enda .qan filen i mappen (då de döps om automatiskt till txt när det väl funkar).

 

myvar är nu första raden, borde vara andra plus att första 23 tecknen på den raden inte ska vara med.

 

Och slutgiltigen, hur använder man myvar för att döpa om källfilen?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Okej leker runt lite och får lite grepp om det.

 

::==

@echo off

setLocal EnableDelayedExpansion

for /f "skip=1 tokens=3 delims= " %%a in (SuperQ.qan) do (

if !myvar!'==' set myvar=%%a

)

echo myvar is set to !myvar!

 

::==

 

 

Ger mig 23148 -> myvar men om jag vill ha med det efterföljande får jag inte det att klaffa.

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

::==

@echo off

setLocal EnableDelayedExpansion

for /f "skip=1 tokens=3* delims= " %%a in (SuperQ.qan) do (

if !filnamn!'==' set filnamn=%%a %%b

 

 

)

 

 

ren *.txt "!filnamn!".txt

 

echo filnamn is set to !filnamn!

 

::==

 

 

Fortsätter med mina framsteg så vet den som läser hur lång jag kommit :)

 

 

 

Nu har jag lyckats göra det jag vill rent kommando mässigt. Det som jag inte får att funka är att den ska läsa en *.qan fil (den enda i mappen) utan att bry sig om vad den heter före .qan

 

 

 

Det är egentligen det enda som återstår!

 

 

Länk till kommentar
Dela på andra webbplatser

Okej, trodde inte jag skulle fixa detta själv men har löst problemet.

 


::== 
@echo off
setLocal EnableDelayedExpansion


dir /O-E > Dir\dir.txt



for /f "skip=6 tokens=4 delims= " %%a in (dir/dir.txt) do (
if !qanfil!'==' set qanfil=%%a


)

echo qanfil satt till !qanfil!




for /f "skip=1 tokens=3* delims= " %%a in (!qanfil!) do (
if !filnamn!'==' set filnamn=%%a %%b


)

echo filnamn satt till !filnamn!

ren *.txt "!filnamn!".txt

move "!filnamn!".txt Flytt

::==



 

 

 

Det här blir lösningen iaf, kanske går att göra bättre men det här kommer iaf fungera :) Om nån har input så posta gärna :)

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...