Batch Mehrere Zeilen in cmd.exe

Nightmare85

Captain
Registriert
Apr. 2007
Beiträge
3.557
Hallo,

ich habe eine funktionierende batch-Datei, die mir aus einem Ordner die zuletzt modifizierte Datei in einen anderen verschiebt.

Code:
for /f "delims=" %%i in ('dir /b /a-d /od "C:\Users\User\Music\Quelle\*.XML"') do set "LatestModifiedFile=%%~i"

move "C:\Users\User\Music\Quelle\%LatestModifiedFile%" "C:\Users\User\Music\Test"

Das Problem ist, dass ich auch die Möglichkeit möchte, dies dynamisch über die cmd.exe ausführen zu können.
(Nicht die batch-Datei sondern den Code)

Egal, ob ich es in 1 Zeile schreibe oder ein ^ dazwischen habe, es erscheint immer:

"%%i" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Wie lässt sich das lösen?

Danke und viele Grüße
 
Ich meine wenn man eine for schleife direkt ausführt, darf man nur ein % verwenden, also in deinem Fall:
Bash:
for /f "delims=" %i in ('dir /b /a-d /od "C:\Users\User\Music\Quelle\*.XML"') do set "LatestModifiedFile=%~i"

move "C:\Users\User\Music\Quelle\%LatestModifiedFile%" "C:\Users\User\Music\Test"
Ergänzung ()

Jup, steht sogar so in der Hilfe drin:
Um den FOR-Befehl in einem Batchprogramm zu verwenden, geben Sie %%Variable
statt %Variable an
. Beachten Sie die Groß-/Kleinschreibung bei Variablen-
namen, %i und %I sind nicht identisch.
 
@Korben2206 in deinem zitierten Text steht, dass der TE es genau richtig rum hatte - oder steh ich auf der Leitung?
 
Den Unterschied %% und % wird man nicht wegbekommen.
Alternative: Powershell

z.B.:
PowerShell:
Get-ChildItem C:\Users\User\Music\Quelle\*.xml -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | Move-Item -Destination C:\Users\User\Music\Test\
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NotNerdNotDau und Iqra
just_f schrieb:
@Korben2206 in deinem zitierten Text steht, dass der TE es genau richtig rum hatte - oder steh ich auf der Leitung?
Nein, es steht da einfach nur vom anderen Ende aufgezogen: normal ist in der Kommandozeile ein einzeln % zu nutzen. In einer Batch muss man aber das %% bei for-Schleifen einsetzen.
Bei ihm funktioniert es mit %% in einer Batch-Datei, aber eben halt nicht im direkten Aufruf aus der cmd, weil man dort nur ein % verwendet.
 
  • Gefällt mir
Reaktionen: just_f
Danke für euren Support.

Den Code von @Korben2206 habe ich mal als 1-Zeiler in die cmd.exe eingefügt und ausgeführt.

Es kommt keine Fehlermeldung mehr, nur passiert halt einfach nichts...

Genauer gesagt kommen 2 große Codeblöcke, in denen die XML-Dateien stehen.
Ich denke, dass der move-Befehl nicht ausgeführt wird.

Wir nähern uns zumindest :)

Grüße
 
Ich würde letztendlich auch eher zu Powershell raten.
Da ich nicht weiß wie du die zwei Batch-Zeilen zusammengefügt hast, kann ich nix zu dem Ergebnis sagen.
Powershell ist an der Stelle einfach viel mächtiger (und in meinen Augen auch einfacher, zumindest wenn man sich mal ein bischen damit beschäftigt hat).
 
Vielen Dank für eure Hilfe.
ich werde das jedoch erst nach den Feiertagen probieren können.

Ob PowerShell zur Verfügung steht, weiß ich nicht.
cmd ist halt universell und auf jedem Windows-System verfügbar.

Viele Grüße
 
Powershell steht auch auf jedem aktuellen Windows-System zur Verfügung... also zumindest Win 10 & 11, bei Win 8 bin ich nicht sicher ;) Für Win 7 gibts (auch von mir) keinen Support mehr :D
 
Zurück
Oben