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

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.

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!

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ß.

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.

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?)!
