|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Aiutino per creazione file .bat
Ciao a tutti!
Sono un novellino e mi sto cimentando nella creazione di un file .batper 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?? Grazie a tutti in anticipo per l'attenzione. Buona serata |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Ecco a te:
Codice:
@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
)
Ultima modifica di Tom Joad : 29-04-2014 alle 09:58. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
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!!!
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Quote:
Codice:
@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
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
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: Codice:
PIPPO
|
| script.bat
|--Temp
|
| NomeFile.txt
| video.mp4
| video.srt
| video_HSA.mp4
- 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!!! |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Quote:
Codice:
@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
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Grazie mille!!
Ho creato un .bat ad hoc per provarlo e funziona tutto!! Ho dovuto però modificarlo così: Codice:
@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
Impossibile trovare il percorso specificato. Ora provo ad integrarlo nel .bat originale complessivo |
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Quote:
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Quote:
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 Ri-Ri-Ri grazie!!! |
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Quote:
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: Codice:
PIPPO
|
| script.cmd
|--Temp
|--Film1
| NomeFile.txt
| video.mp4
| video.srt
| video_HSA.mp4
|--Film2
NomeFile.txt
video.mp4
video.srt
video_HSA.mp4
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
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... |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
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.
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Quote:
(così lo script sarà più immediato per gli utilizzatori) Questo è un .bat che comprende solo la parte finale dello script: Codice:
@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
A quanti RI sono arrivato con i Ri-Grazie??? |
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
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: Codice:
if (
...
)
if (
...
)
else (
...
)
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: Codice:
@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 ) Codice:
@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
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
Ecco, così dovrebbe fare quello che vuoi:
Codice:
@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
|
|
|
|
|
|
#16 | |||
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Quote:
Quote:
video.mp4 video.srt video.ssa video.mkv video_HSA.mp4 ed in ultimo il file .txt che di volta in volta cambia nome. Quote:
ma QUI verso metà pagina c'è questo esempio, io ho preso spunto da lì e funziona.... 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 |
|||
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Mar 2005
Messaggi: 2082
|
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. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2007
Città: Torino
Messaggi: 350
|
Quote:
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: Codice:
copy *.srt *.txt ren *.srt video.srt ren *.mp4 video.mp4 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) Grazie e buona serata!!! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:49.










e mi sto cimentando nella creazione di un file .bat










