Servus,
mit dem folgenden Windows Skript will man die letzte Buchstabe von
Ordnernamen entfernen. Problem: mehrere Buchstaben werden entfernt
stattdessen. Woran liegt das?
Ich würd einfach "Advanced Renamer" benutzen, das kann solche Sachen mit
Links und man kann vorher sehen ob das Ergebnis stimmt.
Gibt's bei https://www.advancedrenamer.com/lang/de/
Jens M. schrieb:> Ich würd einfach "Advanced Renamer" benutzen, das kann solche Sachen mit> Links und man kann vorher sehen ob das Ergebnis stimmt.
Oder mit dem Totalcommander, der kann das auch und zeigt ebenfalls das
Ergebnis vorab an.
Leider geht beides schief. Beispiel:
Vorher:
Various.Artists.-.Living.Stereo.Sampler!]
Nachher:
Various.Artists.-.Living.Stereo.Sampler!
Das Problem ist der Ordnername enthält Sonderzeichen wie z.B. Punkte.
chatgpt sagt:
[code]
%%~nf does not mean “entire folder name.” It means only the name part
before the last dot.
Vorschlag dort:
@echo off
setlocal DisableDelayedExpansion
for /d %%f in (*) do (
set "foldername=%%f"
call :ProcessFolder
)
echo Done!
pause
exit /b
:ProcessFolder
set "newname=%foldername:~0,-1%"
if "%newname%"=="" exit /b
if exist "%newname%" exit /b
echo Renaming "%foldername%" to "%newname%"
ren "%foldername%" "%newname%"
exit /b
[code]
Owen S. schrieb:> Woran liegt das?
Das liegt an deinem Programmierfehler.
In einer Schleife des Typs "for each X in Y" darf man natürlich Y nicht
verändern, wenn das Ergebnis nicht undefiniert sein soll.
Owen S. schrieb:> Leider geht beides schief.
Advanced Renamer kann auch gleich die Punkte ersetzen, Leerzeichen oder
Bindestriche einbauen oder entfernen, den dämlichen Warez-Namen richtig
machen nach den Tags, oder die Tags auf den dämlichen Warez-Namen
setzen, ganz wie es dir beliebt, alles in einem Rutsch.
Es gibt Sachen die man mit einem Batchscript schnell mal eben machen
kann, und es gibt Ding die spezialisierte Tools besser können.
Dieses Vorhaben gehört zu den letzteren.
Nur eine Vermutung (hab mir dein Batchskript nicht angesehen) Ordner
werden möglicherweise mehrfach prozessiert, da jeder umbenannte Ordner
als neuer Ordner behandelt wird?
@echo off
setlocal enabledelayedexpansion
for /d %%A in (*) do (
set "name=%%A"
rem Zeichen am Ende entfernen ...
:strip_nonletters
set "last=!name:~-1!"
echo !last! | findstr /R "^[A-Za-z]$" >nul
if errorlevel 1 (
set "name=!name:~0,-1!"
goto strip_nonletters
)
rem letzten Buchstaben entfernen ...
set "new=!name:~0,-1!"
echo Benenne "%%A" in "!neu!"
ren "%%A" "!neu!"
)
echo Fertig.
pause
Danke. Das klappt mit dem Code von Heinz R.
Nun möchte ich stattdessen Dateinamen ändern. Skript:
1
REM erste 25 Zeichen wegmachen
2
@echo off
3
for /R "%~dp0" %%f in (*.txt) do (
4
setlocal disabledelayedexpansion
5
set "name=%%f"
6
setlocal enabledelayedexpansion
7
ren "!name!" "!name:~25!" 2>nul
8
endlocal
9
endlocal
10
)
11
echo Done.
Also vorher:
V.A.-.[RCA.LIVING.STEREO.Munch.-.A.Hi-fi.Spectacular!.txt
Nachher:
Munch.-.A.Hi-fi.Spectacular!.txt
Das Problem ist „ren“ passiert einfach nicht. Der angegebene Dateiname
lautet: F:\test\Munch.-.A.Hi-fi.Spectacular!\
V.A.-.[RCA.LIVING.STEREO.Munch.-.A.Hi-fi.Spectacular!.txt
Ist das ein Muß, „ren“ ohne Ordner zu machen?
Masochist? Oder geht's um's Prinzip, das so unbequem, kompliziert,
umständlich und Fehleranfällig wie möglich zu machen?
Was "ren" kann, könnte dir ein "ren /?" sagen...
Owen S. schrieb:> Nun möchte ich stattdessen Dateinamen ändern.
Lässt du dir gerade von den Forenteilnehmern einen Satz Scripts bauen?
Wie viele sollen's denn werden?
Wie wäre es stattdessen mit Lesen der Doku. bzw. der eingebauten Hilfe?
Daniel A. schrieb:> Unter Linux mit einem Bash Script ist das alles ganz einfach:shopt> -s nullglob> for file in */; do> mv -vnT "$file" "${file::-2}"> done
Wenn schon Perl drauf ist auch rename ( link auf file-rename, je nachdem
was unter /etc/alternatives eingestellt ist) drauf, das kann regexp. Für
das dir-only-handling braucht man dann allerdings doch noch die
Schleife, das kann man aber auf der Konsole zusammen mit rename in
einer zeile reinhauen, hier im Testmodus, das zeigt nur die Änderung,
nimmt sie aber nicht vor:
1
for d in */; do rename -n 's/^(.*)(.)$/$1/' "$d"; done
Wenn es alles so ist wie es sein soll entfernt man den -n Schalter.
Owen S. schrieb:> Danke. Das klappt mit dem Code von Heinz R.
ich habe da zugegeben keine Ahnung von - aber nutze für so was echt oft
ChatGPT, bin ein Freund davon, neue Möglichkeiten testen und nutzen
Hatte es einfach mal aus Neugierde dort eingetippt
Aber ja, ich weiss, viele Hasser von KI hier
Wenn du nicht kontrollieren kannst was GPT dir vorschlägt, ist es
reichlich gefährlich die Programme zu nutzen die es ausspuckt.
Mit Glpck tun sie was sie sollen, meist tun sie einfach nix, oder eben
sie gehen total in die Tonne und löschen irgendwas was nicht gelöscht
werdne sollte.
Jens M. schrieb:> Wenn du nicht kontrollieren kannst was GPT dir vorschlägt, ist es> reichlich gefährlich die Programme zu nutzen die es ausspuckt.> Mit Glpck tun sie was sie sollen, meist tun sie einfach nix, oder eben> sie gehen total in die Tonne und löschen irgendwas was nicht gelöscht> werdne sollte.
oh man - was soll ich sagen
das waren ein paar Zeilen Code - mit ein paar wenigen Hirnzellen kann
man das vorher testen
Aber wenn Du auch nicht weisst ob die Tauchsäge wirklich das Holz sägt,
oder Dir evtl. die Finger abschnibbelt, lass besser generell die Finger
von solchen Sachen
Jens M. schrieb:> Wenn du das so einfach kontrollieren kannst, kannst du es auch ohne GPT> schreiben.
nein, genau das kann ich zugegeben nicht - hier noch eine eckige
Klammer, dort eine Runde,.....
Heinz R. schrieb:> das waren ein paar Zeilen Code - mit ein paar wenigen Hirnzellen kann> man das vorher testen
Glaube ich nicht, sonst hättest du so ein Trivialprogramm auch selber
hinbekommen.
Frank D. schrieb:> Glaube ich nicht, sonst hättest du so ein Trivialprogramm auch selber> hinbekommen.
wenn es so trivial für Dich ist - warum hast es hier nicht gepostet?
Verstehe, zu faul
Aber dann wieder nicht zu faul hier dumme Kommentare abzugebem
Heinz R. schrieb:> Jens M. schrieb:>> Wenn du das so einfach kontrollieren kannst, kannst du es auch ohne GPT>> schreiben.>> nein, genau das kann ich zugegeben nicht - hier noch eine eckige> Klammer, dort eine Runde,.....
Wer die Syntax schon nicht beherrscht, der wird die korrekte Semantik
schon gar nicht überprüfen können.
Deshalb halte ich von Vibe-Coding auch maximalen Abstand.
mir reicht es das Ergebnis zu kontrollieren
aber schön für Dich das Du alles selber kannst, selbst Herz-OPs werden
wahrscheinlich daheim gemacht....
Oder vielleicht auch das Gegenteil - der eifrige Coder der sonst von
nichts Ahnung hat, für alles Handwerker braucht und jetzt Angst hat das
ihm die KI bald die Butter vom Brot nimmt?
Heinz R. schrieb:> wenn es so trivial für Dich ist - warum hast es hier nicht gepostet?
Weil ich schon ne Alternative gepostet habe, da ich den Windowsbatchmüll
schon lange nicht mehr verwende wie eigentlich jeder der nicht in den
80ern hängen geblieben ist.
> Verstehe, zu faul> Aber dann wieder nicht zu faul hier dumme Kommentare abzugebem
Zum Glück haben wir ja dich, den freundlichen Helfer der ChatGPT
bedienen kann.
Frank D. schrieb:> Zum Glück haben wir ja dich, den freundlichen Helfer der ChatGPT> bedienen kann.
Tja, der eine hats, der andere nötig :-)
Aber ich hatte das Gleiche vor 20 Jahren, Kollegen haben gesagt - hey,
Du kannst doch Google bedienen, kannst mir mal helfen?
Heinz R. schrieb:> Aber ich hatte das Gleiche vor 20 Jahren, Kollegen haben gesagt - hey,> Du kannst doch Google bedienen, kannst mir mal helfen?
Nicht alles, was hinkt, ist ein Vergleich. Ich sag mal, die Kompetenz
„ich kann ChatGPT bedienen“ kommt gleich nach „ich kann den Fernseher
alleine einschalten“.
Oliver
Alexander schrieb:> Würde ich so nicht unterschreiben. Prompten will gelernt sein.
Natürlich. Nur liefert ChatGPT aber unverdrossen Antworten, egal, ob der
Mensch vor dem Bildschirm nun Ahnung hat, oder nicht. Da kommt’s dann
schnell zu persönlichen Überschätzungen.
Oliver