/ / Premenovanie priečinka (krátko) po vytvorení v cykle s novými časovými pečiatkami - dávkový súbor - okná, dávkové súbory, cmd

Premenovanie priečinka (krátko) po vytvorení v slučke s novými časovými pečiatkami - dávkový súbor - okná, dávkový súbor, cmd

Základná otázka:

Ako si môžem vziať nedávno vytvorený priečinok (urobený v tej istej dávke), potom robiť veci v priečinku, potom premenovať priečinok s časovou pečiatkou a opakovať s novým súborom generujúcim novú časovú pečiatku?

Obrys a očakávaný kód šarže oproti skutočným výsledkom:

Vytváram dávkový súbor, ktorý bude prechádzať nasledujúcimi krokmi, pre všetky súbory v adresári.

Krok 1 (pracovný): prejdite súbor v adresári a extrahujte údaje, tieto údaje sa potom odošlú do vytvoreného priečinka, ktorý musí byť nazvaný „výstup“ (ktorý sa vytvorí počas tohto kroku).

Krok 2 (pracovný): Musím ísť do tohto „výstupného“ priečinka a „robiť veci“ s údajmi (už mám skript, ktorý ide do tohto nového súboru „výstup“ a „robí veci“)

Krok 3 (nefunguje): premenujte priečinok „output“ na „output_TimeStamp“ (Tu je môj problém, moja slučka vezme časovú pečiatku č. 1 prvého vytvoreného priečinka a pokúsi sa pomenovať časovú pečiatku všetkých priečinkov # 1)

Krok 4 (polopracovaný): Vráťte sa späť na krok 1 a pokračujte v práci na nasledujúcom súbore (opakovanie, kým sa všetky súbory nedokončia v adresári).

Môj kód (aspoň jeden z mojich pokusov)

::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:UsersuserDocumentswinPythonWinPython-64bit-3.4.4.2python-3.4.4.amd64python.exe "%CD%DoStuff.py" "%CD%outputfolderfolder2Do.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


)

Môj výskum

Skúsil som veľa vecí a použil odkazy Ako môžem zväčšiť názov priečinka pomocou dávky systému Windows? a cmd riadok premenovať súbor s dátumom a časom.
Mám pocit, že by to malo byť oveľa jednoduchšie, ako napísať túto otázku.

odpovede:

0 pre odpoveď č. 1

Keďže som nekontroloval logiku vášho skriptu, opravil som nasledujúce problémy, o ktorých som už hovoril môj komentár:

  1. goto :Label preruší kontext zátvorky bloku kódu for slučka predstavuje taký blok; takže vykonávanie pokračuje o :Label ale takým spôsobom, že by už viac nebol v bloku. Môžete to obísť umiestnením časti kódu obsahujúcej goto a :Label v podprograme a zavolajte ho call príkaz; skryje aktuálny kontext bloku pred goto.
  2. :: komentáre môžu viesť k neočakávanému správaniu pri použití v slučkách alebo v iných zátvorkách kódu; v skutočnosti predstavujú neplatné štítky. Mali by ste použiť rem miesto.
  3. umožniť oneskorené rozšírenie a použiť ho pre premenné date, time a FILENAME, pretože inak sa pri analýze celej slučky vždy rozšíria na hodnoty prítomné.

Tu je upravený kód:

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:UsersuserDocumentswinPythonWinPython-64bit-3.4.4.2python-3.4.4.amd64python.exe" "%CD%DoStuff.py" "%CD%outputfolderfolder2Do.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