kriegstreiber
Goto Top

Batch Variable lässt sich nicht kürzen

Hi,

ich stehe vor einem seltsamen Problem. Ich lese den Inhalt einer Textdatei ein und setze den als Variable.

set /p MaxCLL=<"%TEMP%\Info.txt"  
set "MaxCLL=%MaxCLL:~-6%"  

Wie man hier sieht, will ich die letzten 6 Ziffern löschen.

gebe ich jetzt echo %MaxCLL% ein, erscheint das hier: :~-6%
setze ich das echo %MaxCLL% vor Codezeile 2, funktioniert es (nur halt leider zu lang)

Alternativ würde auch das einlesen der TXT mit tokens gehen, es wäre immer der erste Token in der ersten Zeile. Aber auch dazu bin ich irgendwie nicht fähig.
Langsam gehen mir die Ideen aus...

Content-ID: 495405

Url: https://administrator.de/contentid/495405

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

SeaStorm
SeaStorm 16.09.2019 aktualisiert um 19:21:49 Uhr
Goto Top
Hi

flüchtigkeitsfehler

set MaxCLL=%MaxCLL:~-6%
also ohne die Anführungszeichen

EDIT
Grad gesehen du schneidest nicht die letzten 6 weg, sondern zeigst die letzten 6 an.
Abschneiden wäre
set MaxCLL=%MaxCLL:~0,-6%
Kriegstreiber
Kriegstreiber 16.09.2019 aktualisiert um 19:27:08 Uhr
Goto Top
Geht leider auch nicht, dasselbe Problem (hatte die Füsschen erst später gesetzt, weil ich dachte, die seien schuld).

Komisch ist auch folgendes:

Funktioniert:
for /f "usebackq tokens=1" %%a in ("%TEMP%\Info.txt") do echo MaxCLL=%%a

Funktioniert nicht:
for /f "usebackq tokens=1" %%a in ("%TEMP%\Info.txt") do set MaxCLL=%%a
echo %MaxCLL%

Bei deinem zweiten Vorschlag ist das Ergebnis:
MaxCLL=~0,-6
140913
140913 16.09.2019 aktualisiert um 19:30:26 Uhr
Goto Top
Eingangsdatei hat falsches Encoding (Unicode/UTF8/etc).
https://ss64.com/nt/chcp.html
Btw. https://www.dostips.com/DtTipsStringManipulation.php
SeaStorm
SeaStorm 16.09.2019 aktualisiert um 19:28:14 Uhr
Goto Top
doch das geht so ... in einem nackigen Script
Und ... steig auf Powershell um ...

Zeig mal dein ganzen Script
Kriegstreiber
Kriegstreiber 16.09.2019 aktualisiert um 20:03:24 Uhr
Goto Top
@ECHO ON
>nul chcp 1252
TITLE HDR10 METADATA PARSER [Team QfG]
@echo off & setlocal
mode con cols=120 lines=40
set DIR_TOOL=%MyFiles%
set MEDIAINFO="%DIR_TOOL%\mediainfo.exe"  
IF EXIST "%DIR_TOOL%\mediainfo.exe" (  
	set MIOK=TRUE
) else (
	set MIOK=FALSE
)
set EXTRACTED=FALSE
set WAIT="%DIR_TOOL%\SFK" sleep  
set GREEN="%DIR_TOOL%\SFK" color green  
set RED="%DIR_TOOL%\SFK" color red  
set YELLOW="%DIR_TOOL%\SFK" color yellow  
set WHITE="%DIR_TOOL%\SFK" color white  
set CYAN="%DIR_TOOL%\SFK" color cyan  
set MAGENTA="%DIR_TOOL%\SFK" color magenta  
set GREY="%DIR_TOOL%\SFK" color grey  
IF "%~1"=="" goto :INFO  
:INITIALIZE
rem LOGO START
%GREEN%
echo HDR10 METADATA PARSER                                                                        v0.1 beta (c) 2019 Team QfG
echo.
echo.                                                     LOADING
echo.
echo == INITIALIZING ========================================================================================================
echo.
%WHITE%
echo Initializing. Please wait...
IF "%MIOK%"=="FALSE" (  
	%RED%
	echo.
	echo MediaInfo not found!
	echo Check your Antivirus Software.
	echo.
	goto EXIT
)
set RESOLUTION=
set CODEC_NAME=
set FRAMERATE=
set DAR=
set FRAMES=
set DURATION=
set MaxCLL=
IF NOT "%~1"=="" (  
	%MEDIAINFO% --output=Video;%%Width%%x%%Height%% %1>"%TEMP%\Info.txt"  
	set /p RESOLUTION=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%HDR_Format_Commercial%% %1>"%TEMP%\Info.txt"  
	set /p COLORSPACE=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%MasteringDisplay_ColorPrimaries/String1%% %1>"%TEMP%\Info.txt"  
	set /p HDRINFO=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%MaxCLL%% %1>"%TEMP%\Info.txt"  
	for /f "usebackq tokens=1" %%a in ("%TEMP%\Info.txt") do set MaxCLL=%%a  
	rem for /f "usebackq tokens=1" %%a in ("%TEMP%\Info.txt") do echo MaxCLL=%%a  
	echo MaxCLL=%maxCLL%
	rem set /p MaxCLL=<"%TEMP%\Info.txt"  
	pause
	%MEDIAINFO% --output=Video;%%Format%%^-%%BitDepth%%Bit^-%%ColorSpace%%^-%%ChromaSubsampling%% %1>"%TEMP%\Info.txt"  
	set /p CODEC_NAME=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%FrameRate%% %1>"%TEMP%\Info.txt"  
	set /p FRAMERATE=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%DisplayAspectRatio/String%% %1>"%TEMP%\Info.txt"  
	set /p DAR=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%FrameCount%% %1>"%TEMP%\Info.txt"  
	set /p FRAMES=<"%TEMP%\Info.txt"  
	%MEDIAINFO% --output=Video;%%Duration/String%% %1>"%TEMP%\Info.txt"  
	set /p DURATION=<"%TEMP%\Info.txt"  
	del "%TEMP%\Info.txt">nul  
)

Ich habe am Anfang des Scripts die Codepage geändert, ich versuche das mal ohne Änderung.
140913
140913 16.09.2019 aktualisiert um 19:50:57 Uhr
Goto Top
Hier ist dein Fehler, du erzeugst eine leere Datei wenn die Eigenschaft nicht existiert.
%MEDIAINFO% --output=Video;%%MaxCLL%% %1>"%TEMP%\Info.txt"
Und wenn nichts in der Datei steht kann du auch nicht kürzen und es kommt zu der entsprechenden Ausgabe die du oben siehstface-wink
Kriegstreiber
Kriegstreiber 16.09.2019 aktualisiert um 20:05:36 Uhr
Goto Top
LÖSUNG:

for /f "usebackq tokens=1" %%a in ("%TEMP%\Info.txt") do set MaxCLL=%%a  

Das Auflösen geht natürlich nur nach den (), aber das reicht mir, brauche die Variable erst später face-smile.

Ich Idiot habe das echo in den Klammern gesetzt zum überprüfen..... *kopfschüttel*
140913
140913 16.09.2019 aktualisiert um 21:05:51 Uhr
Goto Top
Zitat von @Kriegstreiber:
Das Auflösen geht natürlich nur nach den (),
Nö, das geht mit Delayed Expansion und Ausrufezeichen statt Prozentzeichen oder call set auch innerhalb der Klammern ;)
https://ss64.com/nt/delayedexpansion.html