FOK!forum / Digital Corner / Uitroepteken in .CMD bestand
HiDiHowoensdag 19 april 2017 @ 20:22
Ik heb dus een klein windows command bestand waar ik soms een bestandsnaam in gebruik met een uitroepteken
Alles werkt tot ik een bestand aanklik waar een uitroepteken in zit.

Weet iemand de oplossing?
Hier het bestandje

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@echo off
setlocal enabledelayedexpansion enableextensions
set i = -1
set _my_datetime=%DATE:~3,2%-%DATE:~6,2%-%DATE:~9,4%
set commandline="C:/Program Files/MKVToolNix\mkvmerge.exe" --ui-language nl --priority lower --output ^"c:\Replay Media Catcher\Videos %_my_datetime%.mkv^" --language 0:dut --default-track 0:yes --language 1:dut --default-track 1:yes

setlocal enableextensions disabledelayedexpansion
FOR /F "tokens=*" %%G IN ('dir "c:\Replay Media Catcher\*.mpg" /B /O:D') DO (
       set /a "count+=1"
        set "file=%%G"
        setlocal enabledelayedexpansion
        echo !count!:!file!
        endlocal
    c:\ffmpeg\bin\ffmpeg.exe -loglevel verbose -i "c:\Replay Media Catcher\%%G" -filter_complex fade=in:d=2.5 -c:a copy -movflags faststart "c:\Replay Media Catcher\%%G_fade.mkv"
    IF !i! GEQ 1 set commandline=!commandline!+
    set /a i=!i!+1
    set bestand[!i!]=%%G
    setlocal enabledelayedexpansion
    echo !i!:bestand[!i!]
    set commandline=!commandline! ^"^(^" ^"c:\Replay Media Catcher\%%G_fade.mkv^" ^"^)^" 
    )
    endlocal

echo !commandline!
echo *** Start samenvoegen ***
setlocal enableextensions disabledelayedexpansion
!commandline!

echo Normalize audio
c:\ffmpeg\bin\ffmpeg.exe -loglevel verbose -i "c:\Replay Media Catcher\Videos %_my_datetime%.mkv" -sn -af loudnorm=I=-16:TP=-1.5:LRA=11 -c:v copy -c:a aac -b:a 384k -movflags faststart "c:\Replay Media Catcher\Videos %_my_datetime%_loudnorm.mkv"

echo Compand audio
c:\ffmpeg\bin\ffmpeg.exe -loglevel verbose -i "c:\Replay Media Catcher\Videos %_my_datetime%_loudnorm.mkv" -sn -ac 2 -af "aformat=channel_layouts=stereo, compand=0 0:1 1:-90/-900 -70/-70 -30/-9 0/-3:6:0:0:0" -movflags faststart -c:v copy -c:a aac -b:a 384k "c:\Replay Media Catcher\Videos %_my_datetime%_loudnorm_compand.mkv"
endlocal
#ANONIEMwoensdag 19 april 2017 @ 21:04
Kan je hier iets mee?
http://stackoverflow.com/(...)-mark-in-cmd-scripts
Chinlesswoensdag 19 april 2017 @ 21:43
Geen bestanden gebruiken met een ! In de bestandsnaam
HiDiHowoensdag 19 april 2017 @ 23:03
quote:
1s.gif Op woensdag 19 april 2017 21:43 schreef Chinless het volgende:
Geen bestanden gebruiken met een ! In de bestandsnaam
Ja dat had ik al bedacht maar ik heb eigenlijk geen zin om bestanden steeds te moeten hernoemen
Het is een geautomatiseerd proces
HiDiHowoensdag 19 april 2017 @ 23:05
quote:
Ja dat had ik al gezocht maar bestanden worden door de commandline (%1) toegevoegd dus ik kan niet even een ^ of ^^ toevoegen
HiDiHowoensdag 19 april 2017 @ 23:08
Het heeft iets met "setlocal enabledelayedexpansion enableextensions" te maken maar ik krijg het niet voor elkaar
! is een variable in CMD bestanden..dat moet ik uitzetten voor bestanden die worden toegevoegd maar variables heb ik daarna weer nodig
Vandaar dat ik loop te klooien met setlocal
Tussen aanhalingstekens zou ook moeten werken maar wat ik ook probeer ik krijg het niet voor elkaar.......
#ANONIEMwoensdag 19 april 2017 @ 23:23
Kan je de fout opvangen? Als het fout gaat zet je enabledelayedexpansion op disable, en dan probeer je het opnieuw. (en achteraf weer op enable)

http://stackoverflow.com/(...)files-error-handling

[ Bericht 4% gewijzigd door #ANONIEM op 19-04-2017 23:25:18 ]
HiDiHowoensdag 19 april 2017 @ 23:30
quote:
1s.gif Op woensdag 19 april 2017 23:23 schreef d4v1d het volgende:
Kan je de fout opvangen? Als het fout gaat zet je enabledelayedexpansion op disable, en dan probeer je het opnieuw. (en achteraf weer op enable)

http://stackoverflow.com/(...)files-error-handling
Dank je ik zal dat eens bestuderen (disable en enable had ik al geprobeerd)
Ik zal duidelijk wel iets fout doen...maar wat?
Het probleem is dat als het cmd bestand een ! tegenkomt in een filename hij het ziet als variable, die natuurlijk niet bestaat.

Dit krijg ik als fout bij een bestand met uitroepteken

quote:
c:\ffmpeg\bin\ffmpeg.exe -hide_banner -loglevel verbose -i "C:\Replay Media Catcher\Utopia - Video - Binnenkomst visumhouders!.mpg" -filter_
complex fade=in:d=2.5 -c:a copy -movflags faststart "C:\Replay Media Catcher\Utopia - Video - Binnenkomst visumhouders!.mpg_fade.mkv"
IF !i! GEQ 1 set commandline=!commandline!+
set /a i=!i!+1
set bestand[!i!]=Utopia - Video - Binnenkomst visumhouders!.mpg
set commandline=!commandline! "(" "C:\Replay Media Catcher\Utopia - Video - Binnenkomst visumhouders!.mpg_fade.mkv" ")"
)
C:\Replay Media Catcher\Utopia - Video - Binnenkomst visumhoudersd=2.5 -c:a copy -movflags faststart C:\Replay: Invalid argument
Zoals je ziet kapt hij de bestandnaam af bij het uitroepteken (visumhoudersd=2.5)
En op één of andere manier pakt hij het dan weer op bij een dubbelepunt (fade=in:d=2.5)

[ Bericht 2% gewijzigd door HiDiHo op 19-04-2017 23:40:42 ]
mscholwoensdag 19 april 2017 @ 23:40
kan je niet met iets als autoscript autoit om de limitaties van cmd heen werken?
HiDiHowoensdag 19 april 2017 @ 23:41
quote:
0s.gif Op woensdag 19 april 2017 23:40 schreef mschol het volgende:
kan je niet met iets als autoscript om de limitaties van cmd heen werken?
Ja ik zat al te kijken naar powershell maar ik vond dit al knap van mezelf :D
Geen idee hoe powerscript werkt :@
mscholwoensdag 19 april 2017 @ 23:41
quote:
14s.gif Op woensdag 19 april 2017 23:41 schreef HiDiHo het volgende:

[..]

Ja ik zal al te kijken naar powershel maar ik vond dit al knap van mezelf :D
hehe,
ik bedoelde trouwens autoit ;)
HiDiHowoensdag 19 april 2017 @ 23:43
quote:
0s.gif Op woensdag 19 april 2017 23:41 schreef mschol het volgende:

[..]

hehe,
ik bedoelde trouwens autoit ;)
Wat ik dus probeer is om alle .mpg bestanden in een folder om te zetten met ffmpeg.exe naar .mkv (met fade-in enz)
Dit werkt ook prima verder behalve dus voor bestanden met een uitroepteken
Bypass zou zijn om die bestanden eerst te hernoemen door bijvoorbeeld ! te vervangen door een _ en daarna weer terug naar ! maar hoe doe ik dat?

[ Bericht 2% gewijzigd door HiDiHo op 19-04-2017 23:50:35 ]
mscholwoensdag 19 april 2017 @ 23:52
quote:
14s.gif Op woensdag 19 april 2017 23:43 schreef HiDiHo het volgende:

[..]

Wat ik dus probeer is om alle .mpg bestanden in een folder om te zetten met ffmpeg.exe naar .mkv (met fade-in enz)
Dit werkt ook prima verder behalve dus voor bestanden met een uitroepteken
Bypass zou zijn om die bestanden eerst te hernoemen door bijvoorbeeld ! te vervangen door een _ en daarna weer terug naar ! maar hoe doe ik dat?
ik heb het gevoel dat het handiger kan, maar aangezien het grotendeels werkt is het overdoen ook weer zoiets..

deze al gezien?
http://stackoverflow.com/(...)ped-exclamation-mark
HiDiHowoensdag 19 april 2017 @ 23:55
quote:
0s.gif Op woensdag 19 april 2017 23:52 schreef mschol het volgende:

[..]

ik heb het gevoel dat het handiger kan, maar aangezien het grotendeels werkt is het overdoen ook weer zoiets..

deze al gezien?
http://stackoverflow.com/(...)ped-exclamation-mark
Nee dat had ik nog niet gezien, daar zal ik eens induiken
Ziet er wel ingewikkeld uit (8>