okidoki
Goto Top

Batch Datei kopieren in Verzeichnis in Pfad mit Sonderzeichen

Guten Tag,
trotz eines Beitrags von bastla https://www.administrator.de/index.php?content=36547 bleiben bei mir noch Fragen ... face-wink

Ich möchte gerne auch eine Datei kopieren. Allerdings kommen im Pfad Sonderzeichen oder öäü vor. Außerdem fragt er, ob es sich beim Ziel um eine Datei oder um einen Ordner handelt.
Gerne würde ich den Pfad aus einer Datei auslesen und eine Datei in diesen Pfad kopieren, trotz Sonderzeichen. Alles ohne Nachfrage...

for /L %%i in (1,1,5) do copy /y liesmal.txt location%%i.txt

liesmla.txt soll kopiert werden. In location.txt steht der Pfad, z.B. "C:\Temp\Daten zum Löschen\Neuer Ordner"
Muss der ohne Anführungszeichen stehen, oder liegt es vielleicht daran?
Irgendwie verstehe ich die Syntax nicht, der kopiert mir mehrere Dateien in das aktuelle Verzeichnis, aber nicht da hin wo er soll...
Vielleicht kann noch einmal jemand draufgucken face-wink

Danke, OKIDOKI

Content-Key: 180243

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

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: 60730
60730 08.02.2012 um 15:29:00 Uhr
Goto Top
moin,

Irgendwie verstehe ich die Syntax nicht, der kopiert mir mehrere Dateien in das aktuelle Verzeichnis, aber nicht da hin wo er soll...
  • meistens hilft es schon, wenn man komplex erscheinende Zusammenhänge zerlegt und sich dann informiert, was ein einzelner Schritt macht.

C:\>copy /?
Kopiert eine oder mehrere Dateien an eine andere Position.

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] Quelle [/A | /B]
     [+ Quelle [/A | /B] [+ ...]]
     [Ziel [/A | /B]]

[OT]40 Tage weg und nix verpasst[/OT]
Mitglied: bastla
bastla 08.02.2012 um 15:37:08 Uhr
Goto Top
Hallo OKIDOKI!

Wenn Du vorweg
set "location=C:\Temp\Daten zum Löschen\Neuer Ordner"
verwendet hast, musst Du natürlich auch die Variable %location% angeben (da ansonsten, wie Du ja schon bemerkt hast, natürlich nur der Text "location" verwendet wird):
for /L %%i in (1,1,5) do copy liesmal.txt "%location%\%%i.txt"
Da Du hier "copy" in einem Batch verwendest, braucht es für das Überschreiben einer ev schon vorhandenen Zieldatei kein "/y" (steht etwas unterhalb des von T-Mo geposteten Auszugs in der Onlinehilfe).

Anführungszeichen pflege ich erst bei der Verwendung zu setzen, nicht bereits bei der Zuweisung zur Variablen (das erste Anführungszeichen ober befindet sich schon vor dem Variablennamen).

Hinsichtlich der Sonderzeichen: Wenn Du diese mit einem ASCII-Editor eingibst oder etwa per
echo set "location=C:\Temp\Daten zum Löschen\Neuer Ordner">Batchdatei.cmd
aus der CMD-Shell die entsprechende Zeile erzeugst, sollten sie auch funktionieren ...

Grüße
bastla

P.S.: Für den oben ("trotz eines Beitrags von bastla") verlinkten Beitrag kann ich aber nix ... face-wink
Mitglied: 60730
60730 08.02.2012 um 15:47:23 Uhr
Goto Top
Salü Bastla,

ich vermute, der Kollege wil gar nicht forlen, sondern stinknormal forfen.
also nix mit Zähler - mir scheint dieses Tutorial, von dem ich früher immer dachte, es wäre garnicht nötig, müsste mal gefunden werden.
Man(n) könnte Alternativ natürlich den anderen Teil der Befehlskette ähnlich zerlegen und den via /? erzeugten Output man inputten.


Gruß
Mitglied: bastla
bastla 08.02.2012 um 15:56:52 Uhr
Goto Top
Hallo T-Mo!

Bei näherer Betrachtung von
Gerne würde ich den Pfad aus einer Datei auslesen
wirst Du vermutlich mit Deiner Vermutung richtig liegen face-wink - aber schau mer mal (und nehmen wir dann einfach chcp 1252) ...

Grüße
bastla
Mitglied: OKIDOKI
OKIDOKI 08.02.2012 um 20:02:25 Uhr
Goto Top
Guten Abend, hier ist der Kollege face-wink

leider funktioniert bastlas Vorschlag bei mir nicht...
Inhalt location.txt: C:\Temp\Daten zum Löschen\Neuer Ordner
Komischerweise will er 5 Dateien anlegen, kann aber 5x den Pfad nicht finden:

@echo off & setlocal 
chcp 1252>nul 
set "location=location.txt"  
for /L %%i in (1,1,5) do copy liesmal.txt "%location%\%%i.txt"  
chcp 850>nul

OKIDOKI
Mitglied: bastla
bastla 08.02.2012 um 21:45:43 Uhr
Goto Top
Hallo OKIDOKI!
Komischerweise will er 5 Dateien anlegen
Wieso komisch? Deine Schleife zählt ja von 1 bis 5 ...

Zum Einlesen der ersten Zeile einer Datei kannst Du
set /p location=<location.txt
verwenden, wenn es mehrere Zeilen sein sollen, brauchst Du eine "for /f"-Schleife ...

Grüße
bastla
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 08:34:04 Uhr
Goto Top
Hallo bastla,
leider geht es immer noch nicht:

@echo off & setlocal 
set "location=<location.txt"  
for /L %%i in (1,1,1) do copy liesmal.txt "%location%\%%i.txt"  
Pause

Jetzt kommt die Meldung: Syntax für den Dateiname, Verzeichnisnamen oder Datenträgerbezeichnung falsch

Was kann ich tun?
Mitglied: Biber
Biber 09.02.2012 um 09:17:32 Uhr
Goto Top
Moin OKIDOKI,

Zitat von @OKIDOKI:
Hallo bastla,

Was kann ich tun?
Vergleiche mal bastlas "Set /p Location="-Zeile mit deiner "set location="-Zeile...

Grüße
Biber
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 09:21:56 Uhr
Goto Top
Moin Biber,

habe ich gemacht face-wink
Jetzt kommt noch die Meldung Syntaxfehler ...

Oh, mann ...
Gruß OKIDOKI
Mitglied: bastla
bastla 09.02.2012 um 09:47:12 Uhr
Goto Top
Hallo OKIDOKI!

Vielleicht sollten wir jetzt doch einmal darüber reden, was Du eigentlich vorhast - die Verwendung der Zählschleife sieht etwas abenteuerlich aus ...

Grüße
bastla
Mitglied: pieh-ejdsch
pieh-ejdsch 09.02.2012 um 10:27:54 Uhr
Goto Top
moin zusammen,

Ich weis ja nicht, wie ihr das seht. Vllt stehen einfach nur zuviel Bäume vor dem Wald. Aber:
Die Anforderung
for /L %%i in (1,1,5) do copy /y liesmal.txt location%%i.txt
liesmla.txt soll kopiert werden. In location.txt steht der Pfad, z.B. "C:\Temp\Daten zum Löschen\Neuer Ordner"
Inhalt location.txt: C:\Temp\Daten zum Löschen\Neuer Ordner (also ohne Anführungszeichen)

Da es bisher knapp vorbeigeschrammt ist, vfolgender Vorschlag:
Nimm xcopy - das erstellt auch den fehlenden Pfad mit.
@echo off & setlocal 
chcp 1252>nul 
set /p location=< location.txt
for /L %%i in (1,1,5) do xcopy liesmal.txt "%location%\%%i.txt"  
chcp 850>nul

PS. soll jetz Liesl dorthin oder kommt es dort her?
der kopiert mir mehrere Dateien in das aktuelle Verzeichnis, aber nicht da hin wo er soll...

Pps.
die Verwendung der Zählschleife sieht etwas abenteuerlich aus ...
ist auch nur ein copy and paste Syntaxfehler.
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 10:46:53 Uhr
Goto Top
Hallo bastla,

das ist eine gute Idee!

Also, ich möchte eine Datei an einen anderen Ort kopieren. Der Pfad ist in einer Textdatei gespeichert (bspw: "C:\Temp\Daten zum Löschen\Neuer Ordner")
Dort, wo sie hinkopiert werden soll, soll es ohne Nachfrage geschehen.
Zusatzfrage: Wie soll der Pfad gespeichert werden, so "Pfad" oder ohne Gänsefüße?

Danke für deine Mühe!
Gruß OKIDOKI
Mitglied: 60730
60730 09.02.2012 um 11:02:03 Uhr
Goto Top
moin,

  • Gegenfrage 1: Sind Leherzeichen im Pfad zu erwarten?
  • Gegenfrage 2: wieviel Gewicht spart du beim versenden der Batch, wenn die unnützerweise Anführungszeichen mitführt?
  • Gegenfrage 3: Hattest du schon Erfolg beim finden des Tutorials zur Schleifenbildung?
Mitglied: bastla
bastla 09.02.2012 um 11:19:29 Uhr
Goto Top
Hallo OKIDOKI!

Unter der Annahme, dass es den Zielpfad tatsächlich noch nicht gäbe, wäre der Vorschlag von PH sinnvoll, "xcopy" zu verwenden:
@echo off & setlocal
chcp 1252>nul
set /p "location=<location.txt"  
xcopy /y liesmal.txt "%location%\"  
chcp 850>nul
In der Textdatei braucht der Pfad keine Füße - erst bei der Verwendung im Kopierbefehl sind sie dann sinnvoll bzw aufgrund Deines Beispieles auch nötig ...

Grüße
bastla
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 14:47:36 Uhr
Goto Top
Hallo bastla und TimoBeil,

leider kopiert er nach bastals Vorschlag die Datei nur nach C:, obwohl der Pfad C:\Temp\Daten zum Löschen\Neuer Ordner lautet (ob mit oder ohne Gänsefüße...)

Der Zielfpfad ist aber vorhanden, weil ich den vorher mit BrowseForFolder ermittlet habe. Der Pfad steht dann in location.txt

zu TimoBeil:
Gegenfrage 1: Sind Leherzeichen im Pfad zu erwarten? ja, in jedem Fall, auch Sonderzeichen o.ä. sind möglich
Gegenfrage 2: wieviel Gewicht spart du beim versenden der Batch, wenn die unnützerweise Anführungszeichen mitführt? Das wäre kein Problem, die kann ich mit ausgeben oder weglassen
Gegenfrage 3: Hattest du schon Erfolg beim finden des Tutorials zur Schleifenbildung? Da ist mir jetzt der Zusammenhang unklar


Viele Grüße OKIDOKI
Mitglied: pieh-ejdsch
pieh-ejdsch 09.02.2012 um 15:00:06 Uhr
Goto Top
issjahglor

set /p "location=<location.txt"  
isjahrochvöllig anners als
set /p location=<location.txt

1.eres Erwartet eine Eingabe und letzteres setzt als VariablenInhalt die erste Zeile der Datei.

Zitat von @Biber:
Vergleiche mal bastlas "Set /p Location="-Zeile mit deiner "set location="-Zeile...


Zitat von @pieh-ejdsch:
Ich weis ja nicht, wie ihr das seht. Vllt stehen einfach nur zuviel Bäume vor dem Wald.
ist auch nur ein copy and paste Syntaxfehler.
Mitglied: bastla
bastla 09.02.2012 um 15:07:06 Uhr
Goto Top
@ph
Wo Du Recht hast, hast Du Recht face-wink - typischer Fall von "zu gut gemeint" ...

Grüße
bastla
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 15:09:06 Uhr
Goto Top
Super issjahglor!

Hat endlich auf Anhieb funktioniert!

Ergäzung: Esw wird sogar der Pfad (laut location) angelegt, sofern er noch nicht vorhanden ist.

Danke an bastla, issjahglor, TimBeil und Biber für eure kompetente, megaschnelle und vor allem geduldige Unterstützung.

Danke OKIDOKI

PS: Bald gibt es gar keine Probleme mehr, die dieses Forum nicht schon behoben hat!!!
Mitglied: pieh-ejdsch
pieh-ejdsch 09.02.2012 um 15:12:35 Uhr
Goto Top
Höhöhö,

kene Namensverdrehung hier face-wink
if "pieh-ejdsch" equ "issjahglor" (echo(Name richtig.) else echo(Bitte korrigieren.  
Gruß Phil
Mitglied: bastla
bastla 09.02.2012 um 15:51:30 Uhr
Goto Top
Hallo OKIDOKI!

Auch wenn schon "Ende gut" ist - warum steht der Pfad, den Du per "BrowseForFolder" geholt hast, in einer Datei und nicht in einer Variablen?

Grüße
bastla
Mitglied: OKIDOKI
OKIDOKI 09.02.2012 um 16:01:30 Uhr
Goto Top
Also:

Danke pieh-ejdsch [ich habe den Guttenberg gemacht] (copy-paste-Fehler ;-()


Auch wenn schon "Ende gut" ist - warum steht der Pfad, den Du per "BrowseForFolder" geholt hast, in einer
Datei und nicht in einer Variablen?

Da hast du recht, aber die Variable wird vorher in einer Ruotine erfasst, abgespeichert und erst später, irgendwann, wieder eingelesen. Ich hatte das nur als Hintergrud erwähnt, wegen der Gänsefüße oder nicht, denn dann haätte ich das dort ergänzen müssen.

Man kann es nicht oft genug sagen, danke für eure Unermüdlichkeit!
PS: Wie bekommt man so viel Fachwissen ... *Neid*

Gruß OKIDOKI