yearlight
Goto Top

Wert aus txt-Datei auslesen und Ordner danach benennen.

Guten Morgen,
ich versuche einen Wert aus einer txt-Datei auszulesen (hier 4. Zeile, Wert nach einem "=" oder "-" -Zeichen) um danach unter diesem Wert einen Ordner anzulegen.

Ich kriege aber nur die erste Zeile ausgegeben.

Content-Key: 208871

Url: https://administrator.de/contentid/208871

Printed on: April 18, 2024 at 15:04 o'clock

Member: colinardo
colinardo Jul 01, 2013 updated at 09:44:18 (UTC)
Goto Top
Hallo yearlight,
mit folgendem VBS-Script kein Problem:
FILEPATH -> deine Textdatei
BASEFOLDER -> Basis-Ordner in dem der neue Ordner erstellt werden soll (Wenn dein Wert schon einen ganzen Pfad enthält musst du in der letzten Zeile das BASEFOLDER & "\" & entfernen. Das Script geht davon aus das dein String in Zeile 4 steht.
FILEPATH = "C:\test.txt"  
BASEFOLDER = "C:\Basefolder"  

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objText = objFSO.OpenTextFile(FILEPATH, 1)
allArray = Split(objText.ReadAll,vbCrLf)
objText.Close()
strWertArray = Split(allArray(3),"=")  
If UBound(strWertArray) > 0 Then
	strFolderName = Trim(strWertArray(1))
Else
	strFolderName = Trim(Split(allArray(3),"-")(1))  
End If
objFso.CreateFolder(BASEFOLDER & "\" & strFolderName)  
Grüße Uwe
Member: yearlight
yearlight Jul 01, 2013 at 09:23:07 (UTC)
Goto Top
Servus Uwe,
vielen Dank für die schnelle Antwort. Ich brauche die Hilfe für eine Batch-Datei.
Wenn ich jetzt dein Beispiel durchlaufen lasse, wird am Ende der batch nur die durchsuchte Textdatei geöffnet, ein Verzeichnis wird nicht angelegt.
Den Dateinamen (bei mir ServiceInfo.txt) habe ich in Apostrophe gesetzt.
Keine Ahnung, brauche ich noch irgendwelche Umgebungsvariablen?
Steh total auf dem Schlauch, bin mit der Syntax einfach nicht vertraut genug.
Member: colinardo
colinardo Jul 01, 2013 updated at 09:53:38 (UTC)
Goto Top
So das hier sollte jetzt gehen:

setlocal ENABLEDELAYEDEXPANSION
for /f "skip=3 tokens=* delims=" %%k in ('type "ServiceInfo.txt"') do @(  
   set wert=%%k
   for /f "tokens=2 delims==-" %%m in ("!wert!") DO @(  
      md "%%m"  
      goto ENDE
   )
)
:ENDE
Member: yearlight
yearlight Jul 01, 2013 at 11:29:18 (UTC)
Goto Top
Uwe, das geht, das geht.

ich komme aber trotzdem nicht weiter. Am Abschluss dieses Skriptes versuche ich Dateien in dieses neu erstellte Verzeichnis zu kopieren.
Ich mache absolute Pfadangaben, bekomme aber als Fehlermeldung nur System kann Datei nicht finden.
Kann ich die variable m weiterhin als Pfadangabe für das Zielverzeichnis benutzen?

Und warum werden die Dateien nicht gefunden?
Inzwischen habe ich auch kapiert wie Du vorgegangen bist. Steh aber wieder auf dem Schlauch.

Vielen dank für deine Geduld

Achim
Member: colinardo
colinardo Jul 01, 2013 updated at 12:27:51 (UTC)
Goto Top
Steht in dem Wert hinter dem Gleichheitszeichen ein Absoluter Pfad in deiner Datei oder ein relativer ?

für einen relativen nehme das hier und setze in Zeile 2 den Basisordner in dem der neue erstellt werden soll.
@echo off & setlocal ENABLEDELAYEDEXPANSION
set BASISORDNER=C:\Basisordner
for /f "skip=3 tokens=* delims=" %%k in ('type "ServiceInfo.txt"') do @(  
   set wert=%%k
   for /f "tokens=2 delims==-" %%m in ("!wert!") DO @(  
      set neuerOrdner=!BASISORDNER!\%%m
      md "!neuerOrdner!"  
      goto ENDE
   )
)
:ENDE
copy deinedatei.txt "!neuerOrdner!"  

bei einem absoluten Pfad das hier:
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f "skip=3 tokens=* delims=" %%k in ('type "ServiceInfo.txt"') do @(  
   set wert=%%k
   for /f "tokens=2 delims==-" %%m in ("!wert!") DO @(  
      set neuerOrdner=%%m
      md "!neuerOrdner!"  
      goto ENDE
   )
)
:ENDE
copy deinedatei.txt "!neuerOrdner!"  
Member: yearlight
yearlight Jul 01, 2013 at 12:11:43 (UTC)
Goto Top
Danke, aber jetzt legt er mir wieder keinen Ordner mit der Variablen m an.
Syntaxfehler?
Member: Endoro
Endoro Jul 01, 2013 updated at 14:46:27 (UTC)
Goto Top
Hallo yearlight,

zum Testen:

@echo OFF &setlocal
SET "startfolder=." REM hier den Start Ordner eintragen  
CD /d "%startfolder%"  
for /f "usebackqskip=3 tokens=2 delims==-" %%k in ("ServiceInfo.txt") do (  
	IF NOT DEFINED folder MD "%%~k"  
	SET "folder=%%~k"  
)

lg,
Member: colinardo
colinardo Jul 01, 2013 at 14:49:57 (UTC)
Goto Top
Zitat von @Endoro:
Stimmt, geht ja viel simpler, hab heut' nen Batch-Brett vorm Kopf face-wink
Danke Endoro
Member: yearlight
yearlight Jul 01, 2013 at 14:50:19 (UTC)
Goto Top
Hallo Uwe, hallo Endoro,
ich habe den Fehler bei mir gefunden, musste die cmd einfach mal neu starten. Vielen Dank Uwe für deine Geduld, und danke Endoro für das Weiterverfolgen, ich gucks mir Deine Idee noch einmal an.

Auf jeden Fall habe ich heute wieder einiges gelernt.

Vielen Dank
Achim
Member: colinardo
colinardo Jul 02, 2013 at 08:06:48 (UTC)
Goto Top
Noch zur Info: Bitte markiere den Beitrag als gelöst. Siehe dazu die FAQ
face-winkMerci