Verwenden von Server 2016 hier mit einfacher Batch-Datei-Programmierung (für jetzt).Batch-Manipulationszeichenfolge nach Eingabevariable mit "= & rem."
Ich habe, was ich denke, ist ein einfaches Problem, nur dass ich nicht sehe eine praktikable Lösung vor mir jetzt. Ich werde meine Anfrage auf ein Testszenario beschränken, um es einfach zu halten. Was ich versuche, ist, einen String von rechts zu trimmen, bis er das aktuelle Jahr im Format "_% year% -" erreicht, wobei das Jahr von einer anderen Variablen kommt, in meinem Beispiel aber auf "static" gesetzt ist. Wo ich auf Probleme stoße, bezieht sich auf eine Variable aus dem Code, den ich habe.
Dies ist ein funktionierendes Beispiel eine Variable auf der rem Linie nicht verwenden, und gibt die gewünschte Ausgabe von „Machined_Cam-2286:“
@ECHO OFF
SETLOCAL DisableDelayedExpansion
set "testString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "systemYear=2017"
set "yearModified=_%systemYear%-"
echo "%testString%" | find "%yearModified%" >NUL || goto :EOF
set testString=%testString:_2017-=&rem.%
echo %testString%
pause
Sie, dass „_2017-“ sehen in auf hartcodiert die 10. Zeile. Was ich in einem rein logischen Sinn auf der rem Linie speziell zu tun, bin auf der Suche:
set testString=%testString:%yearModified%=&rem.%
Aufgrund der Art und Weise dieser Befehl teststring in-line ändert, macht es schwierig, eine Variable hinein zu injizieren. Ich habe eine riesige Kombination aus Escape- und Erweiterungseinstellungen ausprobiert, um die Variable bisher ohne Erfolg zu erhalten. Ich habe auch versucht zu „bauen“ den Befehl als Zeichenfolge und versuchen, sie und Rohr auf eine Variable die Ausgabe zu nennen:
@ECHO OFF
SETLOCAL DisableDelayedExpansion
set "testString=Machined_Cam-2286_2017-09-08.slddrw - SOLIDWORKS"
set "systemYear=2017"
set "yearModified=_%systemYear%-"
echo "%testString%" | find "%yearModified%" >NUL || goto :EOF
set "callCMD=%%testString:%yearModified%=^&rem.%%"
call %callCMD% > %testString%
echo %testString%
pause
Dies scheint wie eine solche einfache Frage, aber mein Mangel an Verständnis für String-Manipulation unter DOS ist offensichtlich. Wie es aussieht, läuft der Rest des Skripts perfekt mit dem "_2017-" hart-codiert. Es wäre schön, dieses bisschen Wartung zu eliminieren.
Jede Hilfe oder Richtung wird geschätzt.
Vielen Dank.
Warum Sie die verzögerte Erweiterung explizit deaktivieren? – Stephan
Als eine Gewohnheit, ich normalerweise deaktivieren Sie es und aktivieren/deaktivieren Sie es nur, wenn ich Syntax häufig halten muss. Irgendeine Option ist auf dem Tisch, um das zu beheben, also sehe ich, warum es seltsam erscheinen mag, das explizit dort anzubringen. – GHTurbines