2017-08-13 1 views
0

Ich habe ein String Dateinamen wie unter Batch-Skript Zeilen enthalten:Batch-Skript alles nach einem dynamischen Text aus dem String/Dateinamen entfernen

set "file1=name.php_2017_23_08_12_22_07" 
set "file2=name.vbs_2016_16_12_12_13_03" 
.... 

Nun, wie Sie oben sehen, ist die Liste der Dateinamen und ihre Erweiterungen ist Vielfalt und ich muss die echten Dateinamen mit ihren tatsächlichen Erweiterungen (.php, .vbs) jeweils erhalten. Also, wenn ich in einer Funktion mit dem Dateinamen mit der Erweiterung passieren soll ich wie unter tatsächlichen Dateinamen erhalten:

call :restoreFile %file2% ".vbs"

sollte gib mir Ausgabe, alles zu entfernen, nachdem .vbs in den Variablen %file2%:

name.vbs 

Und So auch für andere Variablen.

Wie kann eine Funktion wie das Set, das eine dynamische Teilzeichenfolge von Dateiname String Streifen?

habe ich versucht, den Code unten, aber das mit dynamischen Strings oder Text nicht funktioniert, die aus variablen substituiert werden können:

set targetfile=%file2:.vbs=&rem.% 

Antwort

0

Keine Notwendigkeit, die Erweiterung an - es immer noch im Namen.

Verwenden Sie eine for /f, um den ersten Unterstrich zu teilen.

:restoreFile 
Set "FileName=" 
For /f "tokens=1* delims=_" %%N in ("%~1") Do Set "FileName=%%N" 
If defined FileName Echo Ren %1 %FileName% 
Goto :Eof 

Sie können sogar die date_time vor der Erweiterung setzen und vermeiden so mögliche Betrogenen:

:restoreFile 
Set "FileName=" 
For /f "tokens=1* delims=_" %%N in ("%~1") Do Set "FileName=%%~nN_%%M%%~xN" 
If defined FileName Echo Ren %1 %FileName% 
Goto :Eof 

Die ren Befehle werden mit einem Echo vorangestellt, wenn die Ausgabe das Echo sieht nicht gut entfernen.

Verwandte Themen