peterpan33
Goto Top

Move Befehl nicht in der Shell anzeigen!

Die Aussage: "Datei(en) verschoben." soll unterbunden werden

Hallo,
ich würde es gerne unerbinden, dass der Move Befehl anzeigt was er macht.
Also:
MOVE %CD%\*.JPG "%date%_ORDNER\%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%.JPG"

zeigt z.B. an: "1 Datei(en) verschoben."

Gibt es eine Möglichkeit, wie ich die Anzeige in der Shell für diese Aussage unterbinden kann?
noch eine kleine Zusatzfrage, gibt es Proleme unter WIN XP mit der Variablen %CD%, wenn ich den Move Befehl mit einer For Schleife nutze:

FOR %%I IN (c:\test\*.JPG) DO MOVE %%I %CD%
rem soll alle JPG aus C:\Test in den aktuellen Ordner schieben

Vielen Dank für Hilfe
und besten Gruß

Content-Key: 142754

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

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

Member: dog
dog May 13, 2010 at 01:20:17 (UTC)
Goto Top
Gibt es eine Möglichkeit, wie ich die Anzeige in der Shell für diese Aussage unterbinden kann?

http://www.microsoft.com/resources/documentation/windows/xp/all/proddoc ...
http://en.wikipedia.org/wiki//dev/null
Mitglied: 77559
77559 May 13, 2010 at 08:51:17 (UTC)
Goto Top
Willkommen im Forum PeterPan33,

dog hat natürlich Recht, wobei auch die deutsceh Wikipedia einen /dev/null Eintrag hat.

Bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen in der Formatierungshilfe

Zur zweiten Frage solltest du, wenn die Möglichkeit von Leer-/Sonderzeichen im Pfad- oder Dateinamen besteht, die Variablen in Anführungszeichen setzen.
Als Ziel für den aktuellen Ordner kannst du auch einfach gar nichts oder einen Punkt nehmen.
FOR %%I IN (c:\test\*.JPG) DO MOVE "%%~fI" "%CD%" >NUL 
Wobei du das Problem bekommst das u.Umständen die Batchdatei anhält ohne das du erkennen kannst warum.
Wenn eine Datei gleichen Namens bereits existiert, fragt move nach, aber du kannst die ins Schwarze Loch >NUL geschickte Frage nicht sehen.
Wenn du daher die /y Option von Move benutzt, musst du entweder sicher sein das überschrieben werden soll oder vorher selber nachprüfen.
FOR %%I IN (c:\test\*.JPG) DO If Not exist "%%~nxI" MOVE "%%~fI" . >NUL 

Gruß
LotPings
Member: bastla
bastla May 13, 2010 at 13:14:59 (UTC)
Goto Top
Hallo LotPings!

Nur als Anmerkung:
"copy" und "move" werden in einem Batch defaultmäßig mit einem "/y" ausgeführt ...

Grüße
bastla
Mitglied: 77559
77559 May 13, 2010 at 14:10:38 (UTC)
Goto Top
Zitat von @bastla:
Nur als Anmerkung:
"copy" und "move" werden in einem Batch defaultmäßig mit einem "/y" ausgeführt ...
Hast ja Recht, muss Alzheimer sein face-wink

wenn er nicht überschreiben will, ist das Abprüfen aber schon wichtig.

Gruß
LotPings
Member: bastla
bastla May 13, 2010 at 14:20:45 (UTC)
Goto Top
@77559
wenn er nicht überschreiben will, ist das Abprüfen aber schon wichtig.
Keine Frage - und vor allem wenn es um das Zusammenführen von Dateien in einem Ordner ("flattening") geht, muss darauf geachtet werden, ob eine gleichnamige Datei im Zielordner bereits existiert ...

Grüße
bastla
Member: peterpan33
peterpan33 May 13, 2010 at 20:32:54 (UTC)
Goto Top
vielen Dank der Mühe! Bin schon über Dogs hinweis zu Ziel gelangt und wenn die Datei schon vorhanden ist, wird sie einfach überschrieben. Das stellt kein Problem dar. Das mit den Anführungszeichen ist ein guter Tip!!!
mir ist noch etwas unklar:

Als Ziel für den aktuellen Ordner kannst du auch einfach gar nichts oder einen Punkt nehmen.
> FOR %%I IN (c:\test\*.JPG) DO MOVE "%%~fI" "%CD%" >NUL 
> 

Also wieso schreibst du "%%~fI" anstatt "%%I"?
Könnte mein Quelltest dann auch so aussehen:
FOR %%I IN (c:\test\*.JPG) DO MOVE >NUL
Lieben Gruß und vielen Dank
Mitglied: 77559
77559 May 14, 2010 at 08:27:32 (UTC)
Goto Top
Zitat von @peterpan33:
Also wieso schreibst du "%%~fI" anstatt "%%I"?
Das ist hier wahrscheinöich nicht nötig, die Tilde+f ~f erzwingt die Angabe mit vollem Pfad.

Könnte mein Quelltest dann auch so aussehen:
FOR %%I IN (c:\test\*.JPG) DO MOVE >NUL
Nein, die Quelle musst du schon angeben.
FOR %%I IN (c:\test\*.JPG) DO MOVE "%%I" . >NUL

Gruß
LotPings
Member: peterpan33
peterpan33 May 16, 2010 at 20:59:23 (UTC)
Goto Top
Hallo,
dake für die Hife, aber ich hab noch eine Frage. Ich würde gerne eine Variabel für das aktuelle Verzeichnis in die For Schleife einbinden. Das habe ich so geschafft:

FOR %%I IN ('DIR *.JPG /b') DO MOVE "%%I" . >NUL

Soweit so gut. Nun will ich auf ein Unterverzeichnis im aktuellen Ordner zugreifen. Also "%CD"/Ordner/*JPG.

FOR %%I IN ("%CD"/Ordner/*JPG) DO MOVE "%%I" . >NUL
Dies funktiert leider nicht !!!!

Leider funktioniert dies nicht in meiner For Schleife. Was mach ich falsch?
Wo kann ich nachlesen, was die Syntax in einer For schleife bedeuten also in meinem Fall /b?
Danke für die Mühe
Besten Gruß
Mitglied: 77559
77559 May 16, 2010 at 22:16:27 (UTC)
Goto Top
Zitat von @peterpan33:
Hallo,
dake für die Hife, aber ich hab noch eine Frage. Ich würde gerne eine Variabel für das aktuelle Verzeichnis in die
For Schleife einbinden. Das habe ich so geschafft:

FOR %%I IN ('DIR *.JPG /b') DO MOVE "%%I" . >NUL
Soweit so gut. Nun will ich auf ein Unterverzeichnis im aktuellen Ordner zugreifen. Also "%CD"/Ordner/*JPG.
Soweit so schlecht face-sad der Befehl kann nicht funktionieren, ohne /f nach dem for,
damit auch Pfad-/Dateinamen mit Leer-/Sonderzeichen verarbeitet werden können fehlt auch noch "Delims=" oder "Tokens=*"

FOR %%I IN ("%CD"/Ordner/*JPG) DO MOVE "%%I" . >NUL
Dies funktiert leider nicht !!!!
Leider funktioniert dies nicht in meiner For Schleife. Was mach ich falsch?
Alles face-wink
  • Du vermischst die unterschiedlichen Formen des For-Befehls
  • Die Variable CD braucht vorne und hinten ein %-Zeichen
  • Bei der einfachen Form von For
    • wird der Inhalt mit Anführungszeichen einfach ausgegeben
    • kannst du AFAIK kein Slash / benutzen.

Für die folgenden Beispiele gebe ich nur mit Echo aus ohne >NUL

Dies sollte funktionieren (Wobei "%%I" relative Dateinamen ausgibt)
FOR %%I IN (.\Ordner\*JPG) DO Echo MOVE "%%I" . 
absolute Referenzen mit
FOR %%I IN (.\Ordner\*JPG) DO Echo MOVE "%%~fI" .

oder auch dies
FOR /f "delims=" %%I IN ('Dir /B /S .\Ordner\*JPG') DO Echo MOVE "%%I" . 
Was nicht funktioniert, ist die Verwendung von Dir /B ohne /S mit relativen Angaben -> in der Ausgabe fehlt dann die Ebene \Ordner\.

Noch eine Variante
For /R ".\Ordner" %%I in (*.jpg) do Echo MOVE "%%I" . 

Wo kann ich nachlesen, was die Syntax in einer For schleife bedeuten also in meinem Fall /b?
Die eingebaute Hilfe von For mit
CHCP 1252
For /? >For-Help.txt
in eine Textdatei schreiben und ausdrucken oder zumindest mehrfach lesen.

Ist doch etwas länger geworden face-wink

Gruß
LotPings
Member: peterpan33
peterpan33 May 16, 2010 at 23:47:30 (UTC)
Goto Top
ohh man,
super Sache vielen Dank. Man kommt sich schon ein wenig als blödi vor. Das beinhaltet aber wohl jeder Lernprozess... Werde gleich versuchen alle Tips umzusetzen.
Vielen Dank und besten Gruß