Ich such ein Tool oder Skript (für Windows) um den Namen von Ordnern umzudrehen, quasi zu spiegeln. So soll "Ordnername" nach der Umwandlung zu "emanrendrO" werden. Mit den in den Ordnern enthaltenen Dateien soll nichts passieren.
Das ist eigentlich für Linux, aber unter Windows sollte es mit MSYS oder cygwin auch gehen:
1 | # Aktuelles verzeichnis |
2 | for name in * |
3 | do mv --backup=nil "$name" "$(echo "$name"|rev)" |
4 | done |
5 | |
6 | # Aktuelles verzeichnis + unterverzeichnisse |
7 | find . -not -path '*/.*' -not -path . | tac | while IFS='' read name |
8 | do mv --backup=nil "$name" "$(dirname "$name")/$(basename "$name"|rev)" |
9 | done |
Wenn man nix installieren möchte, könnte man abgesehen von der PowerShell immer noch den Kommandointerpreter aka cmd.exe verwenden. Folgenden Text als revdir.cmd speichern.
1 | @echo off |
2 | @setlocal EnableExtensions, EnableDelayedExpansion |
3 | |
4 | if "%~1"=="" goto :eof |
5 | if not exist "%~1" goto :eof |
6 | |
7 | if /I "%~2"=="/1" goto :par1 |
8 | if /I "%~2"=="/r" goto :parr |
9 | |
10 | :--- name |
11 | call :rendir "%~1" |
12 | goto :eof |
13 | |
14 | :--- one level |
15 | :par1 |
16 | FOR /F "delims=" %%d IN ('dir "%~1" /b/a:d') DO call :rendir "%%d" |
17 | goto :eof |
18 | |
19 | :--- recursive |
20 | :parr |
21 | FOR /F "delims=" %%d IN ('dir "%~1" /s/b/a:d ^| sort /r') DO call :rendir "%%d" |
22 | goto :eof |
23 | |
24 | |
25 | :------------------------- |
26 | : extract name and path from |
27 | : parameter 1 |
28 | : reverses the name and |
29 | : renames directory |
30 | |
31 | :rendir |
32 | set dname=%~n1 |
33 | set dpath=%~dp1 |
34 | call :revname |
35 | |
36 | rem echo "dpath : "!dpath! |
37 | rem echo "dname : "!dname! |
38 | rem echo "rname : "!rname! |
39 | echo move "!dpath!!dname!" "!dpath!!rname!" |
40 | |
41 | REM move /Y "!dpath!!dname!" "!dpath!!rname!" |
42 | |
43 | goto :eof |
44 | |
45 | :-------------------------- |
46 | : reverses up to 255 chars |
47 | : in parameter dname |
48 | : result is returned in rname |
49 | |
50 | :revname |
51 | set rname= |
52 | FOR /L %%i IN (255,-1,0) DO ( |
53 | set char=!dname:~%%i,1! |
54 | if not "!char!"=="" ( |
55 | rem echo %%i |
56 | rem echo !char! |
57 | set rname=!rname!!char! |
58 | ) |
59 | ) |
60 | goto :eof |
Aufruf mit revdir.cmd "startdir" [/1|/r]. Ohne Parameter wird nur "startdir" umbenannt; mit /1 werde alle direkt unter "startdir" liegenden Verzeichnisse und mit /r auch alle weiter darunter befindlichen Verzeichnisse umgedreht - ohne "startdir" zu ändern. Derzeit wird nur das Ergebnis angezeigt; wenn tatsächlich umbenannt werden soll den REMark vor dem move entfernen.
Ich freue mich! Auch wenn dies mehr eine Denksportaufgabe war: wiedermal ein handfester Beweis warum CMD.EXE (und sein Officetauglicher Spielelader drumrum) nicht ernsthaft zu gebrauchen ist. Auch wenn in der sh/ksh/bash-Welt nicht alles perfekt ist[1], sie bietet einfach bessere "manipulexity & whipuptitude". [1] muss man kennen: - shell quoting hell - Variablen global per default - viele Unterprozesse = langsam - "nur" prozedural, nicht OO
wieder zwei neue Wörter gelernt, hier das vermutliche Originalzitat: https://en.wikiquote.org/wiki/Larry_Wall#.22Present_Continuous_-_Future_Perfect.22 manipulexity: the manipulation of complex things whipuptitude: the aptitude for whipping things up
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.