View Full Version : Aiutino per creazione file .bat
aaasss10
28-04-2014, 16:51
Ciao a tutti!
Sono un novellino :bimbo: e mi sto cimentando nella creazione di un file .bat
per automatizzare alcune operazioni su pc.
La mia situazione è la seguente:
Il file .bat che utilizzo è presente in una cartella (es. PIPPO),
all'interno di PIPPO vi è una sottocartella Temp.
Vorrei inserire nel file .bat un comando (o una serie di comandi) che:
-copi il nome di un file .txt (che di volta in volta ha nomi differenti) presente all'interno della sottocartella Temp e
-rinomini (con il nome copiato + "_HSA") un file .mp4 sempre presente nella sottocartella Temp
es.:
se presente in Temp il file PLUTO.txt ottenere il file PLUTO_HSA.mp4
Qualcuno puo' darmi una mano?? :ave:
Grazie a tutti in anticipo per l'attenzione.
Buona serata :D
Tom Joad
29-04-2014, 08:49
Ecco a te:
@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%G in ('dir /b %~dp0TEMP\*.txt') do (
set _file=%%G
set _fileName=!_file:~0,-4!
move /y %~dp0TEMP\!_file! %~dp0TEMP\!_fileName!_HSA.mp4 >nul
)
aaasss10
29-04-2014, 10:11
Grazie mille Tom Joad!!!
Sapevo di poter contare su di te!!!
Proverò ad inserire il tutto nello script.
Ne approfitto per chiedere ancora una cosa:
Come posso far si che una volta rinominato il file .mp4
lo script mi restituisca la frase:
"File xxxxxxx_HSA.mp4 creato e salvato nella catella Temp"
Ancora mille grazie!!! :cincin:
Tom Joad
29-04-2014, 10:40
Grazie mille Tom Joad!!!
Sapevo di poter contare su di te!!!
Proverò ad inserire il tutto nello script.
Ne approfitto per chiedere ancora una cosa:
Come posso far si che una volta rinominato il file .mp4
lo script mi restituisca la frase:
"File xxxxxxx_HSA.mp4 creato e salvato nella catella Temp"
Ancora mille grazie!!! :cincin:
Eccoti il codice. Rinomina tutti i file .txt nella cartella temp in NomeFile_HSA.mp4
@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%G in ('dir /b %~dp0TEMP\*.txt') do (
set _file=%%G
set _fileName=!_file:~0,-4!
move /y %~dp0TEMP\!_file! %~dp0TEMP\!_fileName!_HSA.mp4 >nul
echo File !_fileName!_HSA.mp4 creato e salvato nella cartella %~dp0TEMP
)
echo Operazione completata. Premere un tasto per uscuire.
pause >nul
exit
aaasss10
29-04-2014, 11:05
Aspetta!!! Aspetta!!!
Forse mi sono espresso male nei post precedenti,
io non voglio rinominare un file .txt in NomeFile_HSA.mp4.
La mia situazione è questa:
PIPPO
|
| script.bat
|--Temp
|
| NomeFile.txt
| video.mp4
| video.srt
| video_HSA.mp4
Cartella principale PIPPO contenente:
- script.bat
- sottocartella Temp
Sottocartella Temp contenente:
- NomeFile.txt
- video.mp4
- video.srt
- video_HSA.mp4
Io vorrei che il file video_HSA.mp4 venga rinominato prendendo il nome
dal file NomeFile.txt.
Quindi da video_HSA.mp4 diventi NomeFile_HSA.mp4
(il file NomeFile.txt ha ogni volta un nome differente)
Dopo tutto ciò lo script dovrebbe restituire una riga di testo:
"File NomeFile_HSA.mp4 creato e salvato nella catella Temp"
Grazie ancora per l'attenzione e l'aiuto!!!
Tom Joad
29-04-2014, 11:58
Aspetta!!! Aspetta!!!
Forse mi sono espresso male nei post precedenti,
io non voglio rinominare un file .txt in NomeFile_HSA.mp4.
La mia situazione è questa:
PIPPO
|
| script.bat
|--Temp
|
| NomeFile.txt
| video.mp4
| video.srt
| video_HSA.mp4
Cartella principale PIPPO contenente:
- script.bat
- sottocartella Temp
Sottocartella Temp contenente:
- NomeFile.txt
- video.mp4
- video.srt
- video_HSA.mp4
Io vorrei che il file video_HSA.mp4 venga rinominato prendendo il nome
dal file NomeFile.txt.
Quindi da video_HSA.mp4 diventi NomeFile_HSA.mp4
(il file NomeFile.txt ha ogni volta un nome differente)
Dopo tutto ciò lo script dovrebbe restituire una riga di testo:
"File NomeFile_HSA.mp4 creato e salvato nella catella Temp"
Grazie ancora per l'attenzione e l'aiuto!!!
Sorry, non avevo capito una sega :D
@echo off
setlocal EnableDelayedExpansion
set _tempDir=%~dp0Temp
for /f "delims=" %%G in ('dir /b %_tempDir%\*.txt') do (
set _txtFile=%%G
set _txtFileName=!_txtFile:.txt=!
call :FileRename !_txtFileName!
)
echo Operazione completata. Premere un tasto per uscuire.
pause >nul
exit
:FileRename
for /f "delims=" %%G in ('dir /b %_tempDir%\*.mp4') do (
set _hsaFile=%%G
set _hsaFileName=!_hsaFile:.mp4=!
if "!_hsaFileName:~-4!"=="_HSA" (
move /y %_tempDir%\!_hsaFile! %_tempDir%\%1_HSA.mp4 >nul
echo File %1_HSA.mp4 creato e salvato nella cartella %_tempDir%
echo.
)
)
goto :eof
aaasss10
29-04-2014, 14:38
Grazie mille!!
Ho creato un .bat ad hoc per provarlo e funziona tutto!!
Ho dovuto però modificarlo così:
@echo off
setlocal EnableDelayedExpansion
cd Temp
for /f "delims=" %%G in ('dir /b *.txt') do (
set _txtFile=%%G
set _txtFileName=!_txtFile:.txt=!
call :FileRename !_txtFileName!
)
echo Operazione completata. Premere un tasto per uscuire.
pause >nul
exit
:FileRename
for /f "delims=" %%G in ('dir /b *.mp4') do (
set _hsaFile=%%G
set _hsaFileName=!_hsaFile:.mp4=!
if "!_hsaFileName:~-4!"=="_HSA" (
move /y !_hsaFile! %1_HSA.mp4 >nul
echo File %1_HSA.mp4 creato e salvato nella cartella Temp
echo.
)
)
goto :eof
altrimenti mi restituiva l'errore:
Impossibile trovare il percorso specificato.
Ora provo ad integrarlo nel .bat originale complessivo
Tom Joad
29-04-2014, 14:41
Grazie mille!!
Ho creato un .bat ad hoc per provarlo e funziona tutto!!
Ho dovuto però modificarlo così:
@echo off
setlocal EnableDelayedExpansion
cd Temp
for /f "delims=" %%G in ('dir /b *.txt') do (
set _txtFile=%%G
set _txtFileName=!_txtFile:.txt=!
call :FileRename !_txtFileName!
)
echo Operazione completata. Premere un tasto per uscuire.
pause >nul
exit
:FileRename
for /f "delims=" %%G in ('dir /b *.mp4') do (
set _hsaFile=%%G
set _hsaFileName=!_hsaFile:.mp4=!
if "!_hsaFileName:~-4!"=="_HSA" (
move /y !_hsaFile! %1_HSA.mp4 >nul
echo File %1_HSA.mp4 creato e salvato nella cartella Temp
echo.
)
)
goto :eof
altrimenti mi restituiva l'errore:
Impossibile trovare il percorso specificato.
Ora provo ad integrarlo nel .bat originale complessivo
Ho fatto delle prove, a me funziona alla perfezione. Credo dipenda dal fatto che l'estensione del tuo script sia .bat anziché .cmd. Comunque se funziona meglio così.
aaasss10
29-04-2014, 14:54
Ho fatto delle prove, a me funziona alla perfezione. Credo dipenda dal fatto che l'estensione del tuo script sia .bat anziché .cmd. Comunque se funziona meglio così.
Ah ecco perchè.
Comunque ho integrato tutto nello script e sto testando.
Ti tengo aggiornato...
Se tutto fila liscio ti invio lo script così mi dai un tuo parere :D
Ri-Ri-Ri grazie!!!
Tom Joad
29-04-2014, 15:05
Ah ecco perchè.
Comunque ho integrato tutto nello script e sto testando.
Ti tengo aggiornato...
Se tutto fila liscio ti invio lo script così mi dai un tuo parere :D
Ri-Ri-Ri grazie!!!
Ok, se mi mandi tutto lo script forse capisco meglio. Di video, sottotitoli etc. so ben poco, se non che mi serve VLC per aprirli... :D
Dimmi se sbaglio, ma i file nella cartella temporanea sono tutti relativi a un singolo film, giusto?
NomeFile.txt
video.mp4
video.srt
video_HSA.mp4
Se è così si potrebbe modificare lo script in modo da processare più film in una sola volta.
Ad esempio la struttura della directory potrebbe essere la seguente:
PIPPO
|
| script.cmd
|--Temp
|--Film1
| NomeFile.txt
| video.mp4
| video.srt
| video_HSA.mp4
|--Film2
NomeFile.txt
video.mp4
video.srt
video_HSA.mp4
aaasss10
29-04-2014, 15:41
Azz..
..piccolo intoppo:
Utilizzando un file .txt chiamato The 100 1x01.txt
lo script rinomina il file video_HSA.mp4 in The_HSA.mp4
Sembra che la parte " 100 1x01" del nome del file .txt venga ignorata...
:cry:
Tom Joad
29-04-2014, 15:46
Azz..
..piccolo intoppo:
Utilizzando un file .txt chiamato The 100 1x01.txt
lo script rinomina il file video_HSA.mp4 in The_HSA.mp4
Sembra che la parte " 100 1x01" del nome del file .txt venga ignorata...
:cry:
non mi piace dover gestire file o cartelle con spazi nei nomi o nei percorsi per vari motivi. se vuoi lo sistemo per gestire gli spazi, ma sarebbe preferibile rinominare i file (sempre tramite script) con degli altri caratteri (ad esempio _ ). dimmi quale opzione preferisci e ti modifico di conseguenza lo script.
aaasss10
29-04-2014, 16:00
non mi piace dover gestire file o cartelle con spazi nei nomi o nei percorsi per vari motivi. se vuoi lo sistemo per gestire gli spazi, ma sarebbe preferibile rinominare i file (sempre tramite script) con degli altri caratteri (ad esempio _ ). dimmi quale opzione preferisci e ti modifico di conseguenza lo script.
...se si potessero gestire anche gli spazi sarebbe meglio... :rolleyes:
(così lo script sarà più immediato per gli utilizzatori)
Questo è un .bat che comprende solo la parte finale dello script:
@ECHO OFF
::05-RINOMINA FILE OTTENUTO
setlocal EnableDelayedExpansion
cd Temp
for /f "delims=" %%G in ('dir /b *.txt') do (
set _txtFile=%%G
set _txtFileName=!_txtFile:.txt=!
call :FileRENAME !_txtFileName!
)
GOTO DelORIG
:FileRENAME
for /f "delims=" %%G in ('dir /b *.mp4') do (
set _hsaFile=%%G
set _hsaFileName=!_hsaFile:.mp4=!
if "!_hsaFileName:~-4!"=="_HSA" (
move /y !_hsaFile! %1_HSA.mp4 >nul
)
)
::06-BACKUP FILE ORIGINALI
:DelORIG
SET /P A=Eliminare i file di origine? (.mp4 e .srt) [S/N]
ECHO.
IF /I "%A%"=="S" (
cd Temp
del video.mp4
del video.srt
del video.ssa
del video.mkv
del *.txt
CLS
ECHO ====================================================================
ECHO === Mp4 HardSubber ===
ECHO == ==
ECHO === v.14.04.29 by aaasss10 ===
ECHO ====================================================================
ECHO.
ECHO - File di origine eliminati
ECHO.
ECHO - File %1_HSA.mp4 con HardSub integrati
ECHO creato e salvato nella catella Temp
ECHO.
ECHO.
GOTO END
)
IF /I "%A%"=="N" (
cd Temp
del *.txt
del video.ssa
del video.mkv
md "File originali"
ren video.mp4 "video_originale.mp4"
ren video.srt "video_originale.srt"
move video_originale.mp4 "%~dp0Temp\File originali"
move video_originale.srt "%~dp0Temp\File originali"
CLS
ECHO ====================================================================
ECHO === Mp4 HardSubber ===
ECHO == ==
ECHO === v.14.04.29 by aaasss10 ===
ECHO ====================================================================
ECHO.
ECHO - File di origine spostati nella cartella File originali
ECHO.
ECHO - File %1_HSA.mp4 con HardSub integrati
ECHO creato e salvato nella catella Temp
ECHO.
ECHO.
GOTO END
)
ELSE (
CLS
SET A=
GOTO DelORIG
)
::FINALE
:END
ECHO ====================================================================
ECHO === ===
ECHO == OPERAZIONE COMPLETATA. PREMERE UN TASTO PER USCIRE. ==
ECHO === ===
ECHO ====================================================================
pause >nul
exit
..potresti modificare il codice direttamente qui??
A quanti RI sono arrivato con i Ri-Grazie??? :D
Tom Joad
29-04-2014, 17:32
ATTENZIONE: Quando scrivi una funzione, metti sempre goto :eof alla fine
Poi fammi capire una cosa... i nomi dei file sono sempre gli stessi (video.mp4, video.mkv etc.)?
Altra cosa... in DelORIG c'è qualcosa che non va:
if (
...
)
if (
...
)
else (
...
)
detto tra noi... NUN SE PO' VEDE' (e non funziona)
Non ho molto tempo ora per sistemartelo, ti passo un file che genera il mio script per aggiornare le ISO e che utilizza il comando set /p:
@echo off
:_choice
cls
echo Available ISO images:
echo.
echo 1. it_windows_8.1_enterprise_with_update_x64_dvd_4048657.iso
echo.
echo 2. it_windows_server_2012_r2_with_update_x64_dvd_4048504.iso
echo.
set /p _choice=Your selection:
if [%_choice%]==[1] set _isoFile=it_windows_8.1_enterprise_with_update_x64_dvd_4048657.iso
if [%_choice%]==[2] set _isoFile=it_windows_server_2012_r2_with_update_x64_dvd_4048504.iso
if not defined _isoFile (
goto _choice
) else (
goto _confirmation
)
:_confirmation
echo.
echo Selected file: %_isoFile%
echo.
set /p _confirmation=Do you want to continue? [Y,N]
if /i not [%_confirmation%]==[y] (
set _choice=
set _isoFile=
goto _choice
)
Infine il codice che ti serve, testato e funzionante anche se i nomi file contengono spazi.
@ECHO OFF
::05-RINOMINA FILE OTTENUTO
setlocal EnableDelayedExpansion
cd Temp
for /f "delims=" %%G in ('dir /b *.txt') do (
set "_txtFile=%%G"
set "_txtFileName=!_txtFile:.txt=!"
call :FileRENAME
)
call :DelORIG
:FileRENAME
for /f "delims=" %%G in ('dir /b *.mp4') do (
set "_hsaFile=%%G"
set "_hsaFileName=!_hsaFile:.mp4=!"
if "!_hsaFileName:~-4!"=="_HSA" (
move /y "!_hsaFile!" "!_txtFileName!_HSA.mp4" >nul
)
)
goto :eof
Tom Joad
29-04-2014, 17:47
Ecco, così dovrebbe fare quello che vuoi:
@ECHO OFF
::05-RINOMINA FILE OTTENUTO
setlocal EnableDelayedExpansion
cd Temp
for /f "delims=" %%G in ('dir /b *.txt') do (
set "_txtFile=%%G"
set "_txtFileName=!_txtFile:.txt=!"
call :FileRENAME
)
call :DelORIG
:FileRENAME
for /f "delims=" %%G in ('dir /b *.mp4') do (
set "_hsaFile=%%G"
set "_hsaFileName=!_hsaFile:.mp4=!"
if "!_hsaFileName:~-4!"=="_HSA" (
move /y "!_hsaFile!" "!_txtFileName!_HSA.mp4" >nul
)
)
goto :eof
::06-BACKUP FILE ORIGINALI
:DelORIG
SET /P A=Eliminare i file di origine? (.mp4 e .srt) [S/N]
ECHO.
IF /I "%A%"=="S" (
set _choice=Y
cd Temp
del video.mp4
del video.srt
del video.ssa
del video.mkv
del *.txt
CLS
ECHO ====================================================================
ECHO === Mp4 HardSubber ===
ECHO == ==
ECHO === v.14.04.29 by aaasss10 ===
ECHO ====================================================================
ECHO.
ECHO - File di origine eliminati
ECHO.
ECHO - File !_txtFileName!_HSA.mp4 con HardSub integrati
ECHO creato e salvato nella catella Temp
ECHO.
ECHO.
GOTO END
)
IF /I "%A%"=="N" (
set _choice=N
cd Temp
del *.txt
del video.ssa
del video.mkv
md "File originali"
ren video.mp4 "video_originale.mp4"
ren video.srt "video_originale.srt"
move video_originale.mp4 "%~dp0Temp\File originali"
move video_originale.srt "%~dp0Temp\File originali"
CLS
ECHO ====================================================================
ECHO === Mp4 HardSubber ===
ECHO == ==
ECHO === v.14.04.29 by aaasss10 ===
ECHO ====================================================================
ECHO.
ECHO - File di origine spostati nella cartella File originali
ECHO.
ECHO - File %1_HSA.mp4 con HardSub integrati
ECHO creato e salvato nella catella Temp
ECHO.
ECHO.
GOTO END
)
if not defined _choice (
CLS
SET A=
GOTO DelORIG
)
goto :eof
::FINALE
:END
ECHO ====================================================================
ECHO === ===
ECHO == OPERAZIONE COMPLETATA. PREMERE UN TASTO PER USCIRE. ==
ECHO === ===
ECHO ====================================================================
pause >nul
exit
pause
aaasss10
29-04-2014, 20:46
ATTENZIONE: Quando scrivi una funzione, metti sempre goto :eof alla fine
Ok, ma a cosa serve? eof = end of file?
Poi fammi capire una cosa... i nomi dei file sono sempre gli stessi (video.mp4, video.mkv etc.)?
Alla fine della creazione del file mp4 sottotitolato (video_HSA.mp4) nella catella Temp sono sempre presenti i file:
video.mp4
video.srt
video.ssa
video.mkv
video_HSA.mp4
ed in ultimo il file .txt che di volta in volta cambia nome.
Altra cosa... in DelORIG c'è qualcosa che non va:
if (
...
)
if (
...
)
else (
...
)
detto tra noi... NUN SE PO' VEDE' (e non funziona)
Hai ragione, anche io presumevo dovesse essere IF -> THEN -> ELSE
ma QUI (http://comandi-dos-e-altro.jimdo.com/i-comandi-dos/il-file-batch/) verso metà pagina c'è questo esempio, io ho preso spunto da lì e funziona....
Non ho molto tempo ora per sistemartelo...
Vai tranquillo hai già fatto moltissimo.
Ora inserisco le tue correzioni e faccio un po' di prove.
Ancora Grazie per il tempo che hai perso per me!!
..e ti tengo aggiornato ;)
Tom Joad
29-04-2014, 21:08
A tutto il resto ti rispondo domani, per ora ti chiedo solo: da dove ottieni il file .txt?
Per oggi ti lascio due consigli: un sito molto interessante da consultare come manuale è SS64.com, nella sezione CMD. Per trovare risposte invece è molto utile stackoverflow.com.
aaasss10
29-04-2014, 21:24
A tutto il resto ti rispondo domani, per ora ti chiedo solo: da dove ottieni il file .txt?
Per il funzionamento dello script bisogna inserire i file .mp4 ed .srt nella cartella Temp.
Questi file possono avere qualsiasi nome purchè uguale tra loro.
Ora per far si che i comandi dati ai vari sw di conversione funzionino sempre,
all'inizio dello script ho inserito:
copy *.srt *.txt
ren *.srt video.srt
ren *.mp4 video.mp4
in modo che i file da elaborare siano sempre video.mp4 e video.srt
e per non dimenticare il nome originale di questi file ho creato il file .txt
Ti mando via MP lo script completo appena testato e funzionante!!!
(uso MP non per tenerlo segreto ma solo per non condividere il tutto
fino a quando non sono stra sicuro del corretto funzionamento)
Per oggi ti lascio due consigli: un sito molto interessante da consultare come manuale è SS64.com, nella sezione CMD. Per trovare risposte invece è molto utile stackoverflow.com.
Grazie e buona serata!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.