Seite 1 von 1

Dateinamen von Windows .msu Dateien kürzen [gelöst]

Verfasst: 19.03.2021, 17:19
von Holgi
Hallo liebe Mitstreiter!
Ich benötige bei einer Batch (*.cmd) eure Hilfe:
wir haben ja von Ben dieses tolle Script, welches uns die ellenlangen Dateinamen vom Windows Update Catalog auf ein vernünftiges Maß stutzt.
z.B
windows10.0-kb5000736-x64_880844224a175033802b3d7a1f40ec304c0548dd.msu
auf
windows10.0-kb5000736-x64.msu
Das benutze ich fast täglich. Es sieht so aus:

Code: Alles auswählen

::
@echo off
color 1f
pushd %~dp0
setlocal EnableExtensions
setlocal EnableDelayedExpansion
for %%a in ("*.msu") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.msu" "%%a.msu"
))
for %%a in ("*.cab") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.cab" "%%a.cab"
))
for %%a in ("*.exe") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.exe" "%%a.exe"
))
Leider muss ich immer dieses Script von einem Order in den anderen "schieben", wo meine Update Dateien sind (also mit Unterordnern).
Es wäre toll, wenn man sämtliche Dateien mit diesen langen Dateinamen - also auch die in Unterordnern - von diesem Script suchen und dann kürzen lassen könnte.
Es gibt da so ein Script (wohl auch von Ben?) welches ich ebenfalls gerne nutze, im bestimmte Dateien zu löschen.
Könnte man so etwas nicht verbinden? Frei nach dem Motto: durchsuche alle Ordner mit dem Namen "So-und-So inklusive seinen Unterordnern und kürze alle Dateien mit "ellenlang" die du findest auf normalmaß.
Das zweite Script sieht übrigens so aus:

Code: Alles auswählen

cd /D "%homepath%\Videos\"
FORFILES /S /M "*.txt" /C "cmd /c del @path"
FORFILES /S /M "*.bak" /C "cmd /c del @path"
FORFILES /S /M "*.ini" /C "cmd /c del @path"
FORFILES /S /M "to be deleted.exe" /C "cmd /c del @path"
For /D /r %%G in ("Backup") DO rd /s /q "%%G"
Wäre schön, wenn mir jemand bei helfen könnte. Ein dickes Dankeschön vorweg schonmal :dankeschoen:

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 20.03.2021, 15:11
von Ben
So z.B funktioniert aber nur wenn kein Leerzeichen im Kompletten Pfad zur Datei enthalten ist.

Code: Alles auswählen

::
@echo off
color 1f
pushd %~dp0
setlocal EnableExtensions
setlocal EnableDelayedExpansion
for /f %%a in ('dir /b /s "*.msu"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.msu"
))
for /f %%a in ('dir /b /s "*.cab"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.cab"
))
for /f %%a in ('dir /b /s "*.exe"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.exe"
))
Und Sorry das andere habe ich ganz vergessen. :oops:

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 20.03.2021, 19:58
von Holgi
Danke!

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 12:45
von Holgi
Das Script funktioniert gut; mit der von dir erwähnten Einschränkung, dass keine Leerzeichen im Dateipfad vorhanden sein dürfen.
Frage:
dem von mir erwähnten 2. Script ist es egal, ob Leerzeichen vorhanden sind. Gibt es da noch eine Stellschraube, wo man dran drehen könnte, damit es auch mit deinem Script so funktioniert?
ich meine dieses 2. Script:

Code: Alles auswählen

cd /D "%homepath%\Videos\"
FORFILES /S /M "*.txt" /C "cmd /c del @path"
FORFILES /S /M "*.bak" /C "cmd /c del @path"
FORFILES /S /M "*.ini" /C "cmd /c del @path"
FORFILES /S /M "to be deleted.exe" /C "cmd /c del @path"
For /D /r %%G in ("Backup") DO rd /s /q "%%G"

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 13:03
von DK2000
Versuche mal überall in den For-Schleifen, wo "dir" ausgeführt wird, noch "delims=" einzutragen, also:

Code: Alles auswählen

for /f  "delims=" %%a in ('dir /b /s "*.msu"') do (
set "File=%%a"
Dann ändert sich der Inhalt von %files% in meiner Testumgebung von z.b.

Code: Alles auswählen

D:\Working\Projects\Test\updates
D:\Working\Projects\Test\updates\Updates
D:\Working\Projects\Test\updates\Updates_1
D:\Working\Projects\Test\updates\windows10.0-kb4601554-x64-ndp48_2d34ab16fa8501aa0bd9738d1b8f76024f88d421.msu
nach

Code: Alles auswählen

DD:\Working\Projects\Test\updates
D:\Working\Projects\Test\updates\Updates 2
D:\Working\Projects\Test\updates\Updates_1
D:\Working\Projects\Test\updates\windows10.0-kb4601554-x64-ndp48_2d34ab16fa8501aa0bd9738d1b8f76024f88d421.msu
D:\Working\Projects\Test\updates\Updates 2\Updates_3
D:\Working\Projects\Test\updates\Updates 2\windows10.0-kb4601554-x64-ndp48_2d34ab16fa8501aa0bd9738d1b8f76024f88d421.msu
D:\Working\Projects\Test\updates\Updates 2\windows10.0-kb5000736-x64_880844224a175033802b3d7a1f40ec304c0548dd.msu
D:\Working\Projects\Test\updates\Updates 2\Updates_3\windows10.0-kb5000736-x64_880844224a175033802b3d7a1f40ec304c0548dd.msu
D:\Working\Projects\Test\updates\Updates_1\Windows10.0-KB5000736-x64_2468f0824ff7363a3bc1debc592096ae4c2394fd.cab
Werden also auch Verzeichnisse mit Leerzeichen erfasst. Mein Script läuft zwar etwas anders ab, aber die For-Schleife mit "dir" habe ich da genauso drin.

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 13:14
von Holgi
nee, das hat nicht funktioniert. Schade.
Das Script sieht jetzt so aus:

Code: Alles auswählen

::
@echo off
color 1f
pushd %~dp0
setlocal EnableExtensions
setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir /b /s "*.msu"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.msu"
))
for /f "delims=" %%a in ('dir /b /s "*.cab"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.cab"
))
for /f "delims=" %%a in ('dir /b /s "*.exe"') do (
set "File=%%a"
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "!File!" "%%a.exe"
))

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 13:23
von Holgi
Kommando zurück! Hat doch geklappt. Hatte es mit einem Test auf Updateplattform (KB4052623) versucht.
Die sind bei mir im Ordner "Windows Defender Antivirus-Antischadsoftwareplattform – KB4052623" und da war die Datei "updateplatform_5f44a9bbf0cd2d908433df906387fc7cbdb5dc94.exe".
Hatte vermutet, dass auch hier auf "updateplatform.exe" gekürzt wird, was aber nicht der Fall war.
Bei den anderen Updates mit langen Dateinamen hat es funktioniert.
Danke! :dankeschoen:

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 14:33
von Ben
DK2000 auch von mir ein Danke!
Hab ich wieder etwas gelernt. :)

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 14:39
von DK2000
Bei mir benennt er die "updateplatform_5f44a9bbf0cd2d908433df906387fc7cbdb5dc94.exe" auch um, aber es darf sich nur ein Update davon im Ordner befinden, da ansonsten alle Dateien in "updateplatform.exe" umbenannt werden und das klappt halt nur bei der ersten Datei.

Habe da meine Script mal etwas vom Rest getrennt. Der Läuft so eigenständig, ist aber nach wie vor auf meine Verzeichnsistruktur ausgelegt.

Alle Updates befinden sich in einem Unterordner im Verzeichnis Updates. Kein Update befindet sich direkt unter Updates.

Code: Alles auswählen

echo off
cls

cd /d "%~dp0"

setlocal EnableDelayedExpansion

set UpdRoot=%~dp0

for /f  "delims=" %%d in ('dir /a:d /b /s "%UpdRoot%\Updates"') do (
	set UpdFolder=%%d
	
	if exist "!UpdFolder!\*.msu"  (
		for /f  %%f in ('dir /a:-d /b "!UpdFolder!\*.msu"') do (
		set filename=%%f
		echo "!filename!"
			for /f "tokens=2 delims=_" %%# in ("!filename!") do (
				set "new_filename=!filename:_%%~n#=!"
				ren "!UpdFolder!\!filename!" "!new_filename!"
			)
		)
	)
	
	if exist "!UpdFolder!\*.cab"  (
		for /f  %%f in ('dir /a:-d /b "!UpdFolder!\*.cab"') do (
		set filename=%%f
		echo "!filename!"
			for /f "tokens=2 delims=_" %%# in ("!filename!") do (
				set "new_filename=!filename:_%%~n#=!"
				ren "!UpdFolder!\!filename!" "!new_filename!"
			)
		)
	)
	
	if exist "!UpdFolder!\*.exe"  (
		for /f  %%f in ('dir /a:-d /b "!UpdFolder!\*.exe"') do (
		set filename=%%f
		echo "!filename!"
			for /f "tokens=2 delims=_" %%# in ("!filename!") do (
				set "new_filename=!filename:_%%~n#=!"
				ren "!UpdFolder!\!filename!" "!new_filename!"
			)
		)
	)
	
)
	
:EOF
Die Scripta habe ich da gerne bei mir in einem zentralen Verzeichnis, daher die Zeile "set UpdRoot=%~dp0". In dem Beispiel hier jetzt befindet sich das Verzeichnis "Updates" im selben Verzeichnis wie der Script und die Updates jeweils in eigenen Unterverzeichnissen in "Updates"

Das Forum fügt da ganz schön viele Leerzeichen ein.

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 14:49
von Holgi
aber es darf sich nur ein Update davon im Ordner befinden, da ansonsten alle Dateien in "updateplatform.exe" umbenannt werden und das klappt halt nur bei der ersten Datei.
Hatte ich auch erst gedacht, aber es war/ist nur eine Updateplatform ****.exe Datei vorhanden.
Mit dem ursprünglichen Script

Code: Alles auswählen

::
@echo off
color 1f
pushd %~dp0
setlocal EnableExtensions
setlocal EnableDelayedExpansion
for %%a in ("*.msu") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.msu" "%%a.msu"
))
for %%a in ("*.cab") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.cab" "%%a.cab"
))
for %%a in ("*.exe") do (
for /f "tokens=1,2 delims=_" %%a in ("%%~na") do (
ren "%%a_%%b.exe" "%%a.exe"
))
im gleichen Ordner
funktioniert es. Kömisch.

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 14:52
von Ben
@DK2000 Die Codebox setzt nur die Tabulatoren um, deshalb sind die Abstände so groß. :hihi:

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 15:08
von DK2000
@Ben:
Ja, das war mir da schon klar mit den Tabulatoren. Bei stehen die auf 4 Leerzeichen. Aber im Forum wohl deutlich höher.

@Holgi:
Also das Umbenennen der Updateplatform ****.exe klappt auch mit dem Script von Ben, auch wenn der mir hier ein paar seltsame Fehler produziert. ABer das Umbenennen klappt.

Acho, hatte vergessen, "delims=" einzufügen. Jetzt läuft es ohne komische Fehr durch und benennt alles um.

Wobei das "pushd %~dp0" würde ich da durch "cd /d "%~dp0" ersetzen. "pushd" macht nur dann wirklich Sinn, wenn man das Verzeichnis wechseln will, aber das ursprüngliche Verzeichnis sichern will. In dem Falle kann man dann mittels "popd" wieder in das alte Verzeichnis zurück bzw. wenn man öfters "pushd" ausgeführt hat, dann in das Verzeichnis zurück, welches im Stack ganz oben liegt.

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 16:34
von Ben
So ich hab da jetzt auch mal mit Forfiles rumgespielt. :D Und das ist dabei rausgekommen. Das funktioniert auch mit Leerzeichen im Pfad.

Code: Alles auswählen

@echo off
color 1f
pushd %~dp0
setlocal EnableExtensions
setlocal EnableDelayedExpansion
forfiles /s /m "*.msu" /C "cmd /c for /f """tokens=1,2 delims=_""" %%a in (@fname) do (ren @path "%%a.msu")"
forfiles /s /m "*.cab" /C "cmd /c for /f """tokens=1,2 delims=_""" %%a in (@fname) do (ren @path "%%a.cab")"
forfiles /s /m "*.exe" /C "cmd /c for /f """tokens=1,2 delims=_""" %%a in (@fname) do (ren @path "%%a.exe")"

Re: Dateinamen von Windows .msu Dateien kürzen

Verfasst: 21.03.2021, 17:12
von Holgi
vielen, vielen Dank DK2000 und Ben.
Ich würde sagen, das Thema kann auf "gelöst" gesetzt werden (muss wohl ein Moderator machen?)!
:dankeschoen: