Benutzerdefinierter Befehl fehlgeschlagen

Ich bin mir nicht sicher, was das ausgelöst hat – ein OS-Update oder ein MCEB-Update –, aber in Build .7 und .8 werden konvertierte Dateien nicht mehr auf mein Netzlaufwerk verschoben.

Das hat jahrelang funktioniert, daher weiß ich nicht, was ich falsch gemacht habe.

Wie üblich habe ich den Dienst mit einem Administratorkonto aktualisiert. Ich habe auch versucht, denselben Benutzer in den Netzwerk-Authentifizierungseinstellungen in der Benutzeroberfläche unter Einstellungen hinzuzufügen.

Ich habe dies im Konvertierungs-Log gesehen, aber ich verstehe nicht warum, da keine ungültigen Zeichen im Pfad vorhanden sind.

E:\VideoCaptures\Cleaned Files\Zoo Drop It Like Its Hot s03 e05 07-27-2017.ts

INFORMATION > 2017-07-28T16:15:09 MCEBuddy.Engine.ConversionJob → Running custom commands
→ Custom Renaming Command → %showname% %episodename% s%season%## e%episode%## %airmonth%-%airday%-%airyear% %rating%
WARNUNG → Cannot find Parental Rating
2017-07-28T16:15:09 MCEBuddy.Transcode.CustomCommand → Custom command parameters read →
PostCustomCommandPath = “e:\videocaptures\cleaned files\mcebpostprocess.bat”
PostCustomCommandParameters = “%convertedfile%” %sourcefile% “%destinationpath%” 1080 .%convertedext% 0 %airmonth% %airday% %airyear% %season%##
PostCustomCommandHangPeriod = 0
PostCustomCommandCritical = False
PostCustomCommandUISession = False
PostCustomCommandShowWindow = True
PostCustomCommandExitCodeCheck = False
FEHLER > 2017-07-28T16:15:09 MCEBuddy.Engine.ConversionJob → Unhanded error during conversion, conversion cancelled
System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
at System.IO.Path.IsPathRooted(String path)
at MCEBuddy.Transcode.CustomCommand.Run()
at MCEBuddy.Engine.ConversionJob.Convert()
INFORMATION > 2017-07-28T16:15:09 MCEBuddy.Engine.ConversionJob →
→ Performance Metrics for the Current Conversion

Ich habe beide Logs auf den FTP-Server hochgeladen.

Das liegt daran, dass Ihr benutzerdefinierter Befehl einen ungültigen Befehl erzeugt:

PostCustomCommandPath = “e:\videocaptures\cleaned files\mcebpostprocess.bat”
PostCustomCommandParameters = “%convertedfile%” %sourcefile% “%destinationpath%” 1080 .%convertedext% 0 %airmonth% %airday% %airyear% %season%##
PostCustomCommandHangPeriod = 0
PostCustomCommandCritical = False
PostCustomCommandUISession = False
PostCustomCommandShowWindow = True
PostCustomCommandExitCodeCheck = False
ERROR> 2017-07-28T16:15:09 MCEBuddy.Engine.ConversionJob → Unbehandelter Fehler während der Konvertierung, Konvertierung abgebrochen
System.ArgumentException: Ungültige Zeichen im Pfad.
at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
at System.IO.Path.IsPathRooted(String path)
at MCEBuddy.Transcode.CustomCommand.Run()
at MCEBuddy.Engine.ConversionJob.Convert()

Ihr benutzerdefinierter Befehl erzeugt ungültige Pfadzeichen für Ihre Befehlsbatchdatei.

Hmmmm Hat sich in Build .7 (.8) etwas geändert, oder habe ich etwas verkackt? (Ich habe bewusst keine Änderungen vorgenommen.) Ich habe mir meine System-Backups der letzten 30 Tage angesehen und keine Änderungen an dem untenstehenden festgestellt.

Hier ist die Befehlszeile, wie sie im Profil angegeben ist:

PostCustomCommandPath=“E:\VideoCaptures\Cleaned Files\MCEBPostProcess.bat”
PostCustomCommandParameters=“%convertedfile%” %sourcefile% “%destinationpath%” 1080 .%convertedext% 0 %airmonth% %airday% %airyear% %season%##
PostCustomCommandHangPeriod=0
PostCustomCommandCritical=false

Hier ist die aufgerufene .bat-Datei:

@ECHO OFF

setlocal EnableDelayedExpansion

SET BatFile=“E:\VideoCaptures\Cleaned Files\TVTransfer.bat”
SET OutputFileName=“%~n1”
SET InputFileName=“%~n2”
SET FolderOutput=“%~3”
SET WideoWidth=“%~4”
SET OutputExtension=“%~5”
SET OutputFileSize=“%~z1”
SET OADMonth=“%~7”
SET OADDay=“%~8”
SET OADYear=“%~9”
SHIFT /4
SET SEASON=%~9
Call %BatFile% %OutputFileName% %InputFileName% %FolderOutput% %WideoWidth% %OutputExtension% %OutputFileSize% %OADMonth% %OADDay% %OADYear% %SEASON%

Hier ist die .bat-Datei, in der die ganze Arbeit erledigt wird.

@ECHO ON
setlocal EnableDelayedExpansion

SET sPAT=“\SERVER\Recorded TV\Other Shows”
SET OUTPUT_NAME=“%~1”
SET INPUT_NAME=%~2
SET OUTPUT_FOLDER=%~3
SET VIEDO_WIDTH=%~4
SET OUTPUT_Ext=%~5
SET OUTPUT_FILE_SIZE_MB=%~6
SET OAD_MONTH=%~7
SET OAD_DAY=%~8
SET OAD_YEAR=%~9
SHIFT /4
SET SEASON=%~9
SET SEARCHNAME=

If “%OAD_MONTH%” == “” (
SET OAD_MONTH=NA
)
If “%OAD_DAY%” == “” (
SET OAD_MONTH=NA
)
If “%OAD_YEAR%” == “” (
SET OAD_MONTH=NA
)
If “%SEASON%” == “” (
SET SEASON=NA
)

echo.%OAD_MONTH%
echo.%OUTPUT_FILE_SIZE_MB%

::Todays Date
FOR %%A IN (%Date%) DO (
FOR /F “tokens=1-3 delims=/-" %%B in (”%%~A") DO (
SET MMDDYYYY=%%B-%%C-%%D
)
)

If %OAD_MONTH% NEQ NA (
SET MMDDYYYY=%OAD_MONTH%-%OAD_DAY%-%OAD_YEAR%
)

echo.%MMDDYYYY%

:: Only procc. the video files, otherwise just delete
If %OUTPUT_FILE_SIZE_MB% LEQ 200000000 (
DEL /q “%OUTPUT_FOLDER%%~1%OUTPUT_Ext%”
EXIT
)

::Remove any Spaces from Search Name
set HAYSTACK=%INPUT_NAME%
set HAYSTACK=%HAYSTACK: =%

echo.%HAYSTACK%

:: Grab the string before the first “-”.
for /f “delims=-” %%i in (“%HAYSTACK%”) do set string=%%i
SET SEARCHNAME=%string%

echo.%SEARCHNAME%

:: Get the Show Params
for /f “tokens=2-3 delims=;” %%A in (‘findstr /b /i “%SEARCHNAME%” “C:\FTPSyncFiles\Bat Files\SHOWPARMS.txt”’) do (

SET sPAT=%%A
)

echo This is the program path %sPAT%

:: Copy to the Server
If %sPAT% NEQ “” (

IF %SEASON% NEQ NA (
:: Check to see if Dir exist already
if NOT EXIST %sPAT%\SEASON-%SEASON% (
MD %sPAT%\SEASON-%SEASON%
)

:: Removed the use of OUTPUT_NAME becuase of special charictors and used %~1 (Which removes the quotes) instead
START “MCE Move” /b cmd /c move /y “%OUTPUT_FOLDER%%~1%OUTPUT_Ext%” %sPAT%\SEASON-%SEASON%
:: Update the root directory with the current date using Touch.exe
touch -m %sPAT%
) ELSE (
:: Check to see if Dir exist already
if NOT EXIST %sPAT%%MMDDYYYY% (
MD %sPAT%%MMDDYYYY%
)
:: Removed the use of OUTPUT_NAME becuase of special charictors and used %~1 (Which removes the quotes) instead
START “MCE Move” /b cmd /c move /y “%OUTPUT_FOLDER%%~1%OUTPUT_Ext%” %sPAT%%MMDDYYYY%
:: Update the root directory with the current date using Touch.exe
touch -m %sPAT%
)

:: Delete the .properties files if present
DEL /q “E:\VideoCaptures\QSF%INPUT_NAME%.ts.properties”
DEL /q “E:\VideoCaptures\QSF%INPUT_NAME%.mpg.properties”
)

Beginnen Sie damit, die Variablen auszugeben, die an Ihren benutzerdefinierten Befehl übergeben werden. Die Variablen stammen aus Ihren Metadaten. Schauen Sie in Ihre Logs, um zu sehen, welche Metadaten an MCEBuddy übergeben werden, und Sie werden die Antwort darauf finden, warum sich ein ungültiges Zeichen in Ihrem Pfad befindet.

Wie kann ich die Variablen anzeigen, die von MCE in .7 oder .8 übergeben werden? In älteren Versionen wurde die Ausgabe von MCE in einem Debug-Log protokolliert, aber das scheint nicht mehr der Fall zu sein. Das Einzige, was ich finden kann, ist die Protokollierung der tatsächlich verwendeten Variablennamen.

Ich habe bestätigt, dass MCEBPostProcess.bat und TVTransfer.bat funktionieren, wenn ich eine CMD-Sitzung manuell mit dem von MCE erzeugten Dateinamen erstelle.

Ändern Sie einfach Ihre Batch-Datei, sodass die Eingabevariablen ausgegeben und in Anführungszeichen gesetzt werden, damit Sie Leerzeichen erkennen können, oder schreiben Sie sie in eine Textdatei.

Es scheint, als würde nichts übergeben.

Die Textdatei ist leer (ich schreibe die Variablen in eine Textdatei), aber wenn ich die .bat-Datei manuell ausführe mit:

“e:\videocaptures\cleaned files\mcebpostprocess.bat” “E:\VideoCaptures\Cleaned Files\Cops Dirty Laundry s30 e07 07-29-2017.ts” E:\VideoCaptures\Cops-S30E07-DirtyLaundry-62792569-0.ts “E:\VideoCaptures\Cleaned Files” 1080 .ts 2.500.852 07 28 2017 05

erhalte ich:

BatFileName “E:\VideoCaptures\Cleaned Files\TVTransfer.bat”
VideoOutPut “Cops Dirty Laundry s30 e07 07-29-2017”
VideoInPut “Cops-S30E07-DirtyLaundry-62792569-0”
FolderOutPut “E:\VideoCaptures\Cleaned Files”
VideoWidth “1080”
OutputExt “.ts”
FileSize “2.500.852”
Month “07”
Year “2017”
Season 05

Hier ist die modifizierte mcebpostprocess.bat

ECHO ON

setlocal EnableDelayedExpansion

SET BatFile=“E:\VideoCaptures\Cleaned Files\TVTransfer.bat”
SET OutputFileName=“%~n1”
SET InputFileName=“%~n2”
SET FolderOutput=“%~3”
SET WideoWidth=“%~4”
SET OutputExtension=“%~5”
SET OutputFileSize=“%~6”
SET OADMonth=“%~7”
SET OADDay=“%~8”
SET OADYear=“%~9”
SHIFT /4
SET SEASON=%~9

echo BatFileName %BatFile% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo VideoOutPut %OutputFileName% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo VideoInPut %InputFileName% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo FolderOutPut %FolderOutput% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo VideoWidth %WideoWidth% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo OutputExt %OutputExtension% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo FileSize %OutputFileSize% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo Month %OADMonth% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo Year %OADYear% >> C:\Users\Wolverine\Desktop\MCEVARS.txt
echo Season %SEASON% >> C:\Users\Wolverine\Desktop\MCEVARS.txt

Call %BatFile% %OutputFileName% %InputFileName% %FolderOutput% %WideoWidth% %OutputExtension% %OutputFileSize% %OADMonth% %OADDay% %OADYear% %SEASON%

Dann hat Ihre Datei keine Metadaten. Gehen Sie Ihr Konvertierungsprotokoll durch, um zu sehen, welche Metadaten aus Ihrer Datei extrahiert werden, oder hängen Sie Ihr Konvertierungsprotokoll an.

Ich weiß nicht, wonach ich suchen soll, daher habe ich es angehängt.

Cops-S30E07-DirtyLaundry-62792569-0.ts-TS-2017-08-02T16-01-23.2099867-04-00.zip (36,3 KB)

Ich verstehe nicht, wie MCE die Datei mit fast denselben Informationen, die in den Variablen angefordert werden, umbenennen kann und trotzdem scheitert. Ich nehme an, die Informationen stammen von zwei verschiedenen Quellen?

Ich weiß es nicht, aber das lässt meinen Kopf rauchen.

Ich gehe davon aus, dass die BAT-Datei tatsächlich auf SET sPAT=\"\\\\SERVER\\Recorded TV\\Other Shows\" für den Server eingestellt ist und die Forensoftware es in dem obigen Kommentar zu SET sPAT="\SERVER\Recorded TV\Other Shows" gemacht hat.

Ja, das ist richtig.

Ich habe das völlig übersehen, das ist dein Problem. Du hast deine ausführbare Datei in Anführungszeichen gesetzt, was Windows bei der Übergabe als ungültigen Pfad fehlerhaft behandelt, da Pfade/Dateinamen kein \"-Zeichen enthalten dürfen. Entferne das, dann sollte es funktionieren; es sollte so aussehen:

PostCustomCommandPath=E:\\VideoCaptures\\Cleaned Files\\MCEBPostProcess.bat

Nebenbemerkung: Du solltest vielleicht auf das heutige 2.4.8-BETA-Build aktualisieren. Ich habe ein Problem bei deiner IMDB-Metadaten-Zuordnung festgestellt, das wir behoben haben, und das sollte dir auch die fehlende Altersfreigabe liefern.

EDIT: Im heutigen Build haben wir außerdem eine Prüfung auf dieses ungültige \"-Zeichen eingebaut; MCEBuddy entfernt es automatisch aus dem CustomCommandPath, falls es vorkommt, um diesen Fehler zu vermeiden.

Das war’s, habe die Anführungszeichen entfernt und schon funktionierte es wie ein Charme!

Vielen Dank, dass du das Problem mit der Altersfreigabe so schnell behoben hast!