peters71
Goto Top

BATCH für Dateipfad mit Separator

Hallo,

ich leider keine Erfahrung in der Batch - Programierung, benötige aber ein kleines Batch.

Ich benötige eine Batch - Datei mit der ich Dateipfade nicht unterereinander sodern hintereinander in eine Textdatei geschrieben werden.
Als Separator zwischen den Pfaden muss ein I stehen.

Mit einer einfachen Anweisung wie DIR /a /s >test.txt komme ich nich weiter.

Danke
Peter

Content-Key: 133247

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

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

Member: TsukiSan
TsukiSan Jan 12, 2010 at 12:22:37 (UTC)
Goto Top
mit
echo was auch immer >test.txt
hast du recht. da wird dir die ganze "test.txt"-datei ständig überschrieben.

um wieviele Dateipfade pro Zeile handelt es sich schließlich? Und muss es Batch sein?

Gruß
Tsuki
Member: PeterS71
PeterS71 Jan 12, 2010 at 12:36:06 (UTC)
Goto Top
Hallo,

danke für die schnelle Antwort.
Es werden sicher nicht mehr als 50 Dateipfade.
Ein Überschreiben der ausgangsdatei ist Okay.
Ich will die TXT datei in eine andere Batch einbinden,
ich benötige diese als Inpunt für eine weitere Software und diese wir über eine Batch gesteuert.
Es ist also günstig wenn die txt auch über eine Batch-Datei erzeut wird, so kann ich mehere ineinander "schachteln".

Gruß
Peter
Member: Biber
Biber Jan 12, 2010 at 13:06:27 (UTC)
Goto Top
Moin PeterS71,

wenn ich dich richtig verstehe, dann holst du diese Ordnerliste mit dem DIR-Befehl nach der Mimik "alles unterhalb eines Startordners"?

eine mögliche Entsprechung im Batch wäre eine FOR /F-Anweisung auf genau dieses "DIR /s /a:d startverzeichnis";
eine Alternative eine wäre eine FOR /R /D-Anweisung.

Skizze (ungetestet)
@echo off & setlocal

FOR /R "x:\startdir" /D %%i in (*) do Call :AddThis "%%i;"  
REM wenn das FOR-gelumpe fertig ist, dann sieht %thelongLine% so aus:
REM thelongLine=x:\startdir\pfad1;x:\startdir\pfad1\subpathX;......
REM und da will ich alle Semikolon durch das pipe-Symbol ersetzen
set "thelongline=%thelongline:;=^|%"  
REM mit Caret maskiert nur, weil ich gleich ECHOen will - wäre sonst nicht nötig.
echo %thelongline%>neueTextdatei.txt

:: Ende des Haupt-Batches
goto :eof
~~~~~~
:AddThis Parameter1 ist ein Lw/Pfad in Anführungszeichen
Set theLongline=%theLongline%%~1
goto :eof

Grüße
Biber
Member: PeterS71
PeterS71 Jan 14, 2010 at 07:29:06 (UTC)
Goto Top
Moin Biber

dein Batch geht gut zum erzeugen einer Textdatei. Ich habe nun versucht die Variabele %thelongLine% in meinem Batch zu nutzen. Ich mach aber eine Fehler. Siehst du diesen.
Der Inhalt der Variablen "%Gemarkung% und %Flurstueck% (hier stehen die Dateipfade drin) soll -input zugewiesen werden.

@ECHO OFF 

FOR /R "U:\_Daten\PSW\Lageplaene\Projekte\wb_bleiloch\ALK\alk_2009" /D %%i in (*) do Call :AddThis "%%i;"  
REM wenn das FOR-gelumpe fertig ist, dann sieht %Gemarkung% so aus:
REM thelongLine=x:\startdir\pfad1;x:\startdir\pfad1\subpathX;......
REM und da will ich alle Semikolon durch das pipe-Symbol ersetzen
set "Gemarkung=%Gemarkung:;=^\ALK_1*.shp;%"  
set "Gemarkung=%Gemarkung:;=^|%"  
REM mit Caret maskiert nur, weil ich gleich ECHOen will - wäre sonst nicht nötig.


:: Ende des Haupt-batches
goto :eof
~~~~~~
:AddThis Parameter1 ist ein Lw/Pfad in Anführungszeichen
Set Gemarkung=%Gemarkung%%~1
goto :eof



FOR /R "U:\_Daten\PSW\Lageplaene\Projekte\wb_bleiloch\ALK\alk_2009" /D %%i in (*) do Call :AddThis "%%i;"  
REM wenn das FOR-gelumpe fertig ist, dann sieht %Flurstuecke% so aus:
REM thelongLine=x:\startdir\pfad1;x:\startdir\pfad1\subpathX;......
REM und da will ich alle Semikolon durch das pipe-Symbol ersetzen
set "Flurstuecke=%Flurstuecke:;=^\ALK_2*.shp;%"  
set "Flurstuecke=%Flurstuecke:;=^|%"  
REM mit Caret maskiert nur, weil ich gleich ECHOen will - wäre sonst nicht nötig.
echo %thelongline%>verzeichnisse_alk.txt

:: Ende des Haupt-batches
goto :eof
~~~~~~
:AddThis Parameter1 ist ein Lw/Pfad in Anführungszeichen
Set Flurstuecke=%Flurstuecke%%~1
goto :eof



REM Batch file training Bentley Geo Web Publisher

ECHO ------------------------------------------------------------------------- 
ECHO Convert Whistler DGN files to IDPR files:12.07.2007
ECHO ------------------------------------------------------------------------- 


REM -------------------------------------------------------------------------
REM Set up variables
REM ------------------------------------------------------------------------- 
SET GWPINSTALLPATH=C:\BentleyGWP\GeoWebPublisher\
SET OUTPUTPATH=Z:\Stausee_Blei\Vektor\iDPR\Stausee_Blei
SET PROJECTPATHS=U:\_Daten\PSW\Lageplaene\Einstellungen\Workspace\Seed\MicroStation\Lageplan.dgn
REM ------------------------------------------------------------------------- 



ECHO #------------------------------------------------------------------------- 
ECHO # 1. Create Gemarkung.idpr
%GWPINSTALLPATH%iDPRcnv.exe -type=DGN -input="%Gemarkung%" -seed="%PROJECTPATHS%" -output="%OUTPUTPATH%-Gemarkung.idpr" -level=Lika_Gemark,Text_Lika_Gemark -trace >Gemarkung.txt -wu=untitled  
ECHO # 3. Create Flurstuecke.idpr
%GWPINSTALLPATH%iDPRcnv.exe -type=DGN -input="%Flurstuecke%" -seed="%PROJECTPATHS%" -output="%OUTPUTPATH%-Flurstuecke.idpr" -level=Lika,Text_Lika,Lika_Grenzzeichen,Lika_Flur,Lika_Gemark -trace >Flurstuecke.txt -wu=untitled  

pause
Member: Biber
Biber Jan 14, 2010 at 09:35:57 (UTC)
Goto Top
Moin PeterS71,

ich habe deinen Codeschnipsel mal in Codetags gesetzt, damit ich wenigstens die gemeinte Zeilennummer angeben kann.

Was ich mit bloßem Auge sehe ist:
  • Ergänze in Zeile 1 nach "@echo off" noch ein " & setlocal" [alle im Batch verwendeten Variablen werden NUR dort verwendet]
  • Zeile 28 benutzt die falsche Variable %theLongline%
  • es existiert 2x ein "Call-Block" AddThis... 1x ab Zeile 15 (der wird benutzt) ; 1x ab Zeile 33 (der wird nie benutzt)
  • alles, was nun tatsächlich zum Hauptablauf des Batches gehört (z.B. die zweite FOR-Anweisung "Flurstücke" sollte natürlich auch vor die jetzige Zeile 12 "Ende des Hauptbatches"

Bitte versuche es mit diesen Tipps (erstmal) allein, ein paar Klemmer rauszunehmen.
Den verbleibenden Rest machen wir dann gerne gemeinsam.

Grüße
Biber