fremder
Goto Top

sehr langen Befehl mit Batchdatei erstellen

Hallo Admins,

ich möchte gerne eine Batch erstellen lassen, in der robocopy eine lange Dateiliste übergeben wird. Dazu habe ich eine Datei, in der alle Dateinamen drin stehen.

a.txt
b.txt
c.txt
...

Mit ^ kann man Zeilenumbrüche umsetzten, wie ich hier im Forum gelesen habe. Mein Versuch dazu ist:

@ECHO robocopy.exe %source_dir% %target_dir% /IF^>>%batch_file%

:: Export des Kopierbefehls
for /f %%k in (%dateiliste%) do ( ECHO %%k^>>%batch_file% )

@ECHO /E>>%batch_file%

Nur wird das ^ Zeichen nicht mit übergeben. Könnt ihr mit bitte helfen?

Vielen Dank
Manuel

Content-ID: 49294

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

Ausgedruckt am: 26.11.2024 um 16:11 Uhr

Phlegma
Phlegma 19.01.2007 um 19:36:56 Uhr
Goto Top
hi,
das zeichen ^wird zum maskieren von & verwendet dabei wird dann
statt dass & ausgeführt wird (verknüpfung von befehlen)
& bei echo blabla ^& >bla.txt ein blabla & in die txt datei geschrieben.
hört sich komisch an.. sorry ich kanns net besser formulieren
also ich dneke du musst ^^ machen damit ^ weitergegeben wird
habe das aber nicht selbst getestet....

hth, Ph
Biber
Biber 19.01.2007 um 19:55:49 Uhr
Goto Top
Moin Fremder,

ich denke, da solltest Du nicht zu viel Aufwand in diese Strategie stecken.

Du kannst den /IF-Befehl ja ohnehin nur verwenden, wenn der in einer *.RSJ (Robocopy-JOB-Datei) steht.

Und Du kannst /solltest diese Datei mit "Robocopy [grobe Parameter...] /Save:meinJob" anlegen.

Dann, wenn dieses Skelett steht, kannst Du entweder, wie vom sympathischen Weltmarktführer vorgeschlagen,
  • diese pure Textdatei mit einem Editor ergänzen/verfeinern
  • oder dieses Template in einem Batch zeilenweise mit "ECHO ....>>NeuerJob.RSJ" selbst erzeugen (mit Deinen /IFs, eine je Zeile)
  • oder aus der Vorlage 2 Teile schneiden (MeinJob.Part1 und MeinJob.part2), und zwar da, wo Deine Sonderfälle hinein sollen.
Dann im Batch mit der FOR /F Anweisung wie oben Deine geECHOte Dateiliste an MeinJob.Part1 anfügen und am Ende ein "type MeinJob.Part2>>MeinJob.Part2" oder ein "Copy Meinjob.part1+MeinJob.Part2" machen.

Künstliche Zeilenumbrüche bekommst Du eher nicht transportiert und eine Möglichkeit der Unterdrückung des Zeilenumbruchs beim ECHO-Befehl ist mir nicht geläufig.

Allerdings, wenn es Dich reizt: es gibt "aufgebohrte" ECHO-Tools als Freeware, sowohl in Bunt (XECHO.exe)
wie auch ein Tool, das sich ECHON.exe (oder .com?) nennt.
Das kann ein ECHO-ohne-Zeilenumbruch.
Habe leider keine Quellenangabe, aber eine Suchmaschine sollte das finden.

HTH
Biber
bastla
bastla 19.01.2007 um 20:24:41 Uhr
Goto Top
Hallo Manuel!

... und es gibt primitive Scripts, wie etwa:
'MakeLine.vbs  
If WScript.Arguments.Count = 0 Then
	WScript.Echo "Aufruf mit: " & WScript.ScriptName & " ""Liste.txt"""  
	WScript.Quit(1)
End If
Set fso=WScript.CreateObject("Scripting.FileSystemObject")  
Set oFileList = fso.OpenTextFile(WScript.Arguments(0),1)
sTemp = ""  
Do While Not oFileList.AtEndOfStream
    sTemp = sTemp & oFileList.ReadLine & " "  
Loop
oFileList.Close
WScript.Echo Trim(sTemp)
Nicht weil's Sinn ergäbe (siehe Biber's Ausführungen), sondern nur als Proof-Of-Concept:
for /f "delims=" %%k in ('CScript //nologo MakeLine.vbs "%dateiliste%"') do (  
    echo robocopy.exe %source_dir% %target_dir% /IF %%k /E >%batch_file%
)

Grüße
bastla
fremder
fremder 19.01.2007 um 20:24:44 Uhr
Goto Top
Hallo Biber,

danke, ich werde mich wohl für Nummer 3 entscheiden. Aber heute bin ich leider schon etwas zu müde zum Austesten.

Vielen Dank.

Manuel
bastla
bastla 19.01.2007 um 21:41:28 Uhr
Goto Top
... und doch noch etwas Ernsthaftes: SEND ist zB eines dieser "ECHO"-Ersatz-Tools.

Grüße
bastla