panguu
Goto Top

Windows-Variabel umschreiben - Backslash durch Slash ersetzen, Doppelpunkt entfernen

Hallo Leute,

ich möchte rsync für Windows einsetzen, das läuft unter cygwin. Viele kennen das ja sicherlich. Die Pfade gibt man dort ein im Format cygwin/C/Beispielordner/Subordner

Nun stehe ich aber vor folgendem Problem, denn ich mache folgendes:

1.) ich setze mein Zielverzeichnis auf einen Desktop-Ordner mit dem Befehl "SET DESTDIR=%USERPROFILE%\Desktop\Testing"

2.) wenn ich testweise als Zielverezeichnis C:\Testing wählen wollen würde, dann lautet der rsync-Befehl wie folgt:
"rsync.exe -rtv --delete /cygdrive/D/Quellverzeichnis /cygdrive/C/Testing"
Das synct dann quasi von D:\Quellverzeichnis --nach--> C:\Testing

Funktioniert ja auch. Aber nun möchte ich nich C:\Testing nutzen als Ziel, sondern %DESTDIR%, also C:\blabla\MaxMustermann\Desktop\Testing

Wenn ich einfach
c:\temp\rsync\rsync.exe -rtv --delete /cygdrive/A/ /cygdrive/%DESTDIR%

verwenden würde, schlägt das natürlich fehl, denn die Pfade sind von Cygwin inakzeptabel. Ich such also nun nach einer Möglichkeit, wie ich das lösen könnte. Brauch ich hierzu wirklich ein extra Tool, um meine vorher erstellte %DESTDIR% Variable zu zerstückeln, umzuschreiben und in eine neue Variable zu setzen? Ich hab mir überlegt, dass ich eben mit einem Extra "Suchen-und-Ersetzen" Tool á-la SED (Linux) arbeiten könnte und dann erstmal %DESTDIR% auslese, die Doppelpunkte entferne, und sämtliche Backslashes durch normale Slashes zu ersetzen. Würde das funktionieren?

Wie macht man das aber unter einer Windows-DOS-Shell? Vielleicht kann man das ja geschickt mit "for /f "tokens=xyz delims=\ usw..." lösen?? Hoffe jemand kann mir hierzu mit Tips und Ratschlägen behilflich sein.

Danke im Voraus.

Content-Key: 192678

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

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

Member: TsukiSan
TsukiSan Oct 12, 2012 at 10:56:35 (UTC)
Goto Top
Hallo panguu,

du könntest dich durch diesen Thread lesen.

Viele Grüße

Tsuki
Member: Lochkartenstanzer
Lochkartenstanzer Oct 12, 2012 updated at 11:06:23 (UTC)
Goto Top
moin

newdestdir=`echo %DESTDIR% | sed -e "s:c:\\:/cygdrive/c:g" | sed -e "s:\\:/:g"`

rsync bla $newdestdir


lks

Nachtrag. eventuell muß am quoting noch etwas gefeilt werden. Habe gerade kein cygwin zur Hand.
Member: panguu
panguu Oct 12, 2012 updated at 11:04:57 (UTC)
Goto Top
Habe ich parallel geöffnet, aber ich versteh nicht alles, deswegen bitte ich um Hilfe und Erklärung. Ich hab mir grad folgenden Befehl erstellt:

for /F "tokens=1-5 delims=\" %i in ("%DESTDIR%") do set test="C/%j/%k/%l/%m"

das ist aber keine saubere Lösung, auch wenn es funktioniert anschließend mit:

rsync.exe -rtv --delete /cygdrive/%meinequelle% /cygdrive/%test%

denn ich habe fix tokens=1-5 genutzt, und außerdem konnte ich nicht ein sauberes C in die erste Viariabel schreiben, denn dort wird ein C: geschrieben (also mit Doppelpunkt). Außerdem habe ich manuell die ganzen Slashes reingeschrieben.

Wie könnte man das denn eleganter lösen? Wie durch welchen Befehl kann ich den Backslash einfach durch Slash ersetzen, und den Doppelpunkt rausnehmen? Bin ich mit dem "for /F ..." Kommando total auf der falschen Fährte und muss man das anders lösen, evtl. mit "FIND" ? ich steh echt auf dem Schlauch. Bitte um eine Hilfestellung.

an LKS: Schön, aber sed gibts nicht auf Windows und ich würde tunlichst vermeiden, noch ein weiteres 3rd party Tool verwenden zu müssen. Deswegen war ja die Frage, ob ich das nicht mit "FOR" und "FIND" also Befehle aus dem Interpreter nutzen könnte.
Member: Lochkartenstanzer
Lochkartenstanzer Oct 12, 2012 at 11:05:15 (UTC)
Goto Top
Zitat von @panguu:
Wie könnte man das denn eleganter lösen?

sed ist Dein Freund. (s.o.)

lks
Member: panguu
panguu Oct 12, 2012 updated at 11:09:42 (UTC)
Goto Top
aah, ich glaub ich habs jetzt ... natürlich ohne sed (hatte meinen Beitrag angepasst Lochkartenstanzer, ich möchte kein sed verwenden müssen, aus den oben genannten Gründen)
Member: panguu
panguu Oct 12, 2012 updated at 11:32:08 (UTC)
Goto Top
Perfekt! Funktioniert astrein, und zwar wie folgt:


  1. ich setze die Variable DESTDIR mit folgendem Inhalt:
SET DESTDIR=%USERPROFILE%\Desktop\Testing

  1. das ergibt bei Win7 und WinXP unterschiedliche Ausgaben:
echo %DESTDIR%
Ergebnis auf einer XP-Kiste --> C:\Dokumente und Einstellungen\Max.Mustermann\Desktop\Testing

  1. jetzt kann ich Text suchen und ersetzen direkt mit dem SET-Befehl durchführen, GENIAL! man braucht kein FOR und TOKENS
  2. mit folgendem Befehl ersetze ich erstmal alle Backslashes durch Slash, und speichere es in die Variable DESTMOD1
SET DESTMOD1=%DEST:\=/%

echo %DESTMOD1% ergibt jetzt als Resultat --> C:/Dokumente und Einstellungen/Max.Mustermann/Desktop/Testing

  1. und im letzten Schritt nehme ich noch den Doppelpunkt ganz raus mit folgendem Befehl
  2. und erst hier im finalen Stadium muss ich das ganze noch in Anführungszeichen setzen, da der Pfad Leerzeichen enthält!
SET DESTFINAL="%DESTMOD1::=%"

und voila das Ergebnis mit "echo %DESTFINAL%":

==> C/Dokumente und Einstellungen/Max.Mustermann/Desktop/Testing

face-smile

Als Hilfe kann ich diese Seite empfehlen, die alle Befehle sehr ausführlich mit Beispielen beschreibt und verständlich ausdrückt.
http://www.batchlog.pytalhost.com/Batch.html

Grüße,
Pangu.
Member: TsukiSan
TsukiSan Oct 12, 2012 at 11:35:15 (UTC)
Goto Top
Hallo Panguu,

super! Ich wusste, der Thread direkt hier unten drunter wird dir helfen face-wink

Viele Grüße

Tsuki
Member: panguu
panguu Oct 12, 2012 at 11:37:31 (UTC)
Goto Top
Jup! er war Auslöser, hatte aber den Befehlssyntax nicht verstanden. Weswegen mir die von mir verlinkte Seite zu den Batchbefehlen mit der ausführlichen Erklärung das Ergebnis brachte face-smile

Danke und Grüße,
Pangu.