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-Key: 495405

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

Printed on: April 19, 2024 at 19:04 o'clock

Member: SeaStorm
SeaStorm Sep 16, 2019 updated at 17:21:49 (UTC)
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%
Member: Kriegstreiber
Kriegstreiber Sep 16, 2019 updated at 17:27:08 (UTC)
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
Mitglied: 140913
140913 Sep 16, 2019 updated at 17:30:26 (UTC)
Goto Top
Eingangsdatei hat falsches Encoding (Unicode/UTF8/etc).
https://ss64.com/nt/chcp.html
Btw. https://www.dostips.com/DtTipsStringManipulation.php
Member: SeaStorm
SeaStorm Sep 16, 2019 updated at 17:28:14 (UTC)
Goto Top
doch das geht so ... in einem nackigen Script
Und ... steig auf Powershell um ...

Zeig mal dein ganzen Script
Member: Kriegstreiber
Kriegstreiber Sep 16, 2019 updated at 18:03:24 (UTC)
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.
Mitglied: 140913
140913 Sep 16, 2019 updated at 17:50:57 (UTC)
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
Member: Kriegstreiber
Kriegstreiber Sep 16, 2019 updated at 18:05:36 (UTC)
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*
Mitglied: 140913
140913 Sep 16, 2019 updated at 19:05:51 (UTC)
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