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ď č. 1Keďže som nekontroloval logiku vášho skriptu, opravil som nasledujúce problémy, o ktorých som už hovoril môj komentár:
goto :Label
preruší kontext zátvorky bloku kódufor
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úcejgoto
a:Label
v podprograme a zavolajte hocall
príkaz; skryje aktuálny kontext bloku predgoto
.::
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.- umožniť oneskorené rozšírenie a použiť ho pre premenné
date
,time
aFILENAME
, 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