Ordner umbenennen

#4515837
Lesenswert?

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
Gast #4515988
Lesenswert?

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.
Gast #4516809
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren