2016-07-08 3 views
1

Grund Frage:Umbenennung Ordner (kurz) nach der Erstellung in einer Schleife mit New Time Stamps - Batch File

Wie kann ich einen kürzlich erstellten Ordner nehmen (in der gleichen Partie getan), dann Dinge zu tun in der Ordner, dann benennen Sie den Ordner mit einem Zeitstempel und wiederholen Sie mit einer neuen Datei einen neuen Zeitstempel generieren?

Meine Batch-Code Gliederung und Expected und tatsächliche Ergebnisse:

Ich bin eine Batchdatei erstellen, die in einer Schleife durch die Schritte unten, für alle Dateien in einem Verzeichnis.

Schritt 1 (funktioniert): Datei in einem Verzeichnis durchlaufen und Daten extrahieren, diese Daten werden dann in einen erstellten Ordner ausgegeben, der den Namen "output" hat (der in diesem Schritt erstellt wird).

Schritt 2 (funktioniert): Ich muss in diesen "output" -Ordner gehen und "stuff" mit den Daten (ich habe bereits ein Skript, das in diesen neuen Dateipfad von "output" und "does stuffs" geht))

Schritt 3 (nicht funktioniert): den Ordner „Ausgang“ umbenennen „output_TimeStamp“ (Dies ist, wo mein Problem ist, meine Schleife die erstellte Zeitstempel # 1 des ersten Ordners nimmt und versucht, alle zu nennen Ordner Zeitstempel # 1)

Schritt 4 (halbArbeits): gehen Sie zurück zu Schritt 1 auf der nächsten Datei (Loop zu arbeiten, bis alle Dateien im Verzeichnis fertig sind)

My-Code (und zumindest einer meiner Versuche)

::Loop to perform tasks on files in current directory 
for /R %%f in (*.mp4) do (

::Extracts data from file and leaves it in a created output folder 
start "" /w Sample.exe --clip "%%f" --verbose 2 --outDir output 

::This goes in created output folder and does stuff to data 
start "" /w C:\Users\user\Documents\winPython\WinPython-64bit-3.4.4.2\python-3.4.4.amd64\python.exe "%CD%\DoStuff.py" "%CD%\output\folder\folder2\Do.file" 

::This is supposed to rename the folder with a time stamp 
rename output output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2% 



::This is what my research came to, which increments a number in the timestamp but doesnt work 
set N=0 
set FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N% 
:loop 
set /a N+=1 
set FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N% 
if exist %FILENAME% goto :loop 

echo You can safely use this name %FILENAME% to create a new file 


) 

Meine Forschung

ich zahlreiche Dinge ausprobiert haben und verwendet, um die Verbindungen How do I increment a folder name using Windows batch? und cmd line rename file with date and time.
Ich denke, das sollte viel einfacher sein, als diese Frage aufzuschreiben.

+0

1. Verwenden Sie nicht 'in einer Schleife goto', da sie die Schleife Kontext bricht; Sie könnten den Code, der 'goto' enthält, und das Label in ein 'Call'-Unterprogramm schreiben. 2. Vermeiden Sie '::' Kommentare (die eigentlich ungültige Labels darstellen) in Schleifen, da sie zu unerwarteten Ergebnissen führen können; Verwenden Sie stattdessen "rem". 3. Aktivieren Sie [verzögerte Erweiterung] (http://ss64.com/nt/delayedexpansion.html) für "date" - und "time" -Variablen, da sie sonst immer auf die Werte erweitert werden, die beim Analysieren der gesamten Schleife vorhanden sind. – aschipfl

+0

@aschipfl danke für deine antwort. Ich habe deine Änderungen vorgenommen, aber ich stehe immer noch vor Hürden. Ich weiß nicht genau, was Sie meinen, indem Sie die Unterroutine [call] verwenden, da ich sehr neu bin, Batch zu verwenden. Ich habe die anderen Änderungen vorgenommen. Wenn es einfacher ist, können Sie mir sagen, wie ich nur eine inkrementierende Zahl am Ende des endgültigen Ordners nach dem Datum hinzufügen kann – altairya

+0

Es würde helfen, wenn Sie Ihren aktuellen Code in der Frage veröffentlichen und sagen, wie es Ihre nicht erfüllt Erwartung. Fügen Sie genaue Fehlermeldungen hinzu, wenn sie angezeigt werden. – lit

Antwort

0

Nicht die Logik des Skripts überprüft, habe ich die folgenden Probleme behoben ich bereits in my comment erwähnt:

  1. goto :Label bricht der Kontext eines parenthesised Codeblock, Ihre for Schleife bildet einen solchen Block; so wird die Ausführung bei :Label fortgesetzt, aber in einer Weise, wie es nicht mehr in einem Block wäre. Sie können das umgehen, indem Sie den Codeteil mit goto und :Label in ein Unterprogramm einfügen und mit dem Befehl call aufrufen; Dies blendet den aktuellen Blockkontext von goto aus.
  2. :: Kommentare können zu unerwartetem Verhalten führen, wenn sie in Schleifen oder anderen eingeklammerten Code-Blöcken verwendet werden. Sie stellen tatsächlich ungültige Etiketten dar. Sie sollten stattdessen rem verwenden.
  3. Aktivieren Sie delayed expansion und verwenden Sie sie für die Variablen date, time und FILENAME, da sie sonst immer auf die Werte erweitert werden, die beim Analysieren der gesamten Schleife vorhanden sind.

So, hier ist der modifizierte Code:

setlocal EnableDelayedExpansion 

rem // Loop to perform tasks on files in current directory 
for /R %%f in (*.mp4) do (

    rem // Extracts data from file and leaves it in a created output folder 
    start "" /w "Sample.exe" --clip "%%f" --verbose 2 --outDir output 

    rem // This goes in created output folder and does stuff to data 
    start "" /w "C:\Users\user\Documents\winPython\WinPython-64bit-3.4.4.2\python-3.4.4.amd64\python.exe" "%CD%\DoStuff.py" "%CD%\output\folder\folder2\Do.file" 

    rem // This is supposed to rename the folder with a time stamp 
    rename "output" "output-!date:~4,2!-!date:~7,2!-!date:~10,4!_at_!time:~0,2!!time:~3,2!" 

    call :SUB 

    echo You can safely use this name !FILENAME! to create a new file 

) 
endlocal 
exit /B 


:SUB 
rem // This is what my research came to, which increments a number in the timestamp but doesnt work 
set /a N=0 
set "FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N%" 
:loop 
set /a N+=1 
set "FILENAME=output-%date:~4,2%-%date:~7,2%-%date:~10,4%_at_%time:~0,2%%time:~3,2%.%N%" 
if exist "%FILENAME%" goto :loop 
exit /B 
+0

vielen Dank für Ihre Bemühungen. Sie haben mein Problem behoben, indem Sie die Erklärungspunkte in der Zeile "Umbenennen" hinzugefügt haben. Ich schätze auch die Lektion auf der cal: SUB, das ist eine sehr starke Technik, die ich jetzt sehr oft verwenden werde. – altairya