Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 27.06.2009 um 23:59:33 Uhr
<OT> Habe den Beitrag erst heute gefunden.
Deshalb etwas verspätet danke an pieh-edsch und bastla und...
01.
>set /a rgc+=1 
02.
406
Dankbar
Biber
</OT>
GELÖST

Dateien umbenennen klappt nicht richtig

Frage Entwicklung Batch & Shell

Mitglied: watchdogg

watchdogg (Level 1) - Jetzt verbinden

24.06.2009, aktualisiert 27.06.2009, 4599 Aufrufe, 21 Kommentare

Hallo Leute,

habe folgende Batch geschrieben:

01.
set "PFAD=c:\np\" 
02.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
03.
 
04.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do rename %%i "%ORDNER%_%%~nxi"
Klappt soweit auch, der Großteil wird umbenannt, aber bei genau 38 Dateien kommt Syntaxfehler und er benennt sie nicht um.
Die Dateien unterscheiden sich aber nicht von den anderen, seltsam?!?
Kann mir bitte jemand sagen, wo das Problem liegt?

Zusätzlich:

Wie könnte ich jetzt, falls die Batch mehrmals ausgeführt wird, eine Prüfung einbauen die bereits umbenannte Dateien nicht verändert an die Anderen aber wie bisher den "Ordnernamen" + "_" als Präfix setzt.

Kann mir bitte jemand mal grob die richtige Syntax erklären für:

Alle Dateinamen auf spezielle Zeichenkette z.b.: xx prüfen und falls gefunden diese Zeichenkette in ein anderes Zeichen z.B.: # umbenennen.

Vielen Dank,

MfG watchdogg
Mitglied: bstefan82
24.06.2009 um 09:37 Uhr
Hi,

schon mal

rename "%%i" "%ORDNER%_%%~nxi" probiert? (Eventuell Leerzeichen im Dateinamen?)
Bitte warten ..
Mitglied: Miyamoto
24.06.2009 um 09:46 Uhr
Hi,
für deine Zusatzaufgabe kannst du mal folgendes Probieren

01.
set "PFAD=c:\np\" 
02.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
03.
 
04.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do ( 
05.
 
06.
if not exist "%ORDNER%_%%~nxi"( 
07.
	rename "%%i" "%ORDNER%_%%~nxi" 
08.
09.
)
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 09:46 Uhr
Vielen Dank erstmal bstefan82,

funktioniert super, manchmal ist man richtig beschränkt.

Hast du noch Tipps für meine anderen Fragen?

MfG watchdogg
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 10:03 Uhr
guten Morgen watchdogg

... kommt Syntaxfehler und er benennt sie nicht um.
da sind wie immer die Gänsefüschen Schuld.
Es wurde grad eine Suchmeldung danach ausgegeben.
Am besten schreibe ich mal eine Deklaration über Gänsefüschen...
...mal sehen.

Immer wenn zu Übergebende Variablen spezielle Sonderzeichen oder Leerzeichen enthalten muss die Weiterverarbeitung mit Umgebenden Gänsefüschen erfolgen.
Im Zweifelsfall diese immer "Drumherumbasteln".

So diese Batch bennnt dir Deine Files um egal ob da noch weitere Files in tieferen Ordnern auch umbennant werden müssen.
Und überspringt alle Files welche am Anfang mit
Unterordnername_
beginnen heraus.

"Ungetestet!!!"
01.
echo off & setlocal enabledelayedexpansion 
02.
set "PFAD=c:\np\" 
03.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
04.
::Falls bei der Eingabe vom Unterverzeichnis der Backslash fehlt wird dieser angefügt. 
05.
if defined ORDNER if not "ORDNER:~-1"=="\" set "ORDNER=%ORDNER%\" 
06.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%*.*') do call :lastDir "%%i" 
07.
echo Fertig! & pause 
08.
goto :eof 
09.
:: Herausfiltern des letzten Unterordners! 
10.
:lastDir 
11.
set "DirNr=1" & set "lastDir=%~p1" & set "file=%~ni1" & set "lastDir=%~p1" 
12.
:filter 
13.
if not "%lastDir:~-%DirNr%,1"=="\" (set /a DirNr + = 1 & goto :filter ) 
14.
set /a FileNr = 1 + %DirNr% 
15.
 
16.
if "!lastDir:~-%DirNr%,-1!_"=="!file:~%FileNr%!" rename "%%~1" "%ORDNER%_%%~nx1" 
17.
goto :eof
Gruß Phil

Feedback please
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 10:16 Uhr
Vielen Dank an euch alle,

werde es umgehend testen.


Habt ihr dafür auch noch ne Lösung?

Alle Dateinamen auf spezielle Zeichenkette z.b.: xx prüfen und falls gefunden diese Zeichenkette in ein anderes Zeichen z.B.: # umbenennen.

MfG watchdogg
Bitte warten ..
Mitglied: Miyamoto
24.06.2009 um 11:16 Uhr
hi,
wenn du den Dateinamen schon in einer Variable hast kannst du folgendes machen
01.
%Dateinamen:xx=#%
gruß Miyamoto
Bitte warten ..
Mitglied: miniversum
24.06.2009 um 11:35 Uhr
Kleiner Verbesserungsvorschlag:
Wenn du die Zeile 6 so abänderst kannst Du dir die Prüfung nach den \ am ende vom %PFAD% spaaren:
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%\%ORDNER%\*.*') do call :lastDir "%%i"
Bitte warten ..
Mitglied: miniversum
24.06.2009 um 11:41 Uhr
Möglichkeit1:
echo %dateiname% |find "xx" >NUL 2>NUL || echo Dateiname enthält kein "xx"
oder umgekehrt:
echo %dateiname% |find "xx" >NUL 2>NUL && echo Dateiname enthält "xx"
Möglichkeit2:
if "%dateiname%" equ "%dateiname:xx=%" echo Dateiname enthält kein "xx"
oder umgekehrt:
if "%dateiname%" neq "%dateiname:xx=%" echo Dateiname enthält "xx"
Möglichkeit3:
Das was Miyamoto geschrieben hat auf alle anwenden ;)
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 12:30 Uhr
@ miniversum
Kleiner Verbesserungsvorschlag:

Das habe ich ja extra so geschrieben damit:
Wie könnte ich jetzt, falls die Batch mehrmals ausgeführt wird, eine Prüfung einbauen die bereits umbenannte Dateien nicht verändert an die Anderen aber wie bisher den "Ordnernamen" + "_" als Präfix setzt.
eben diese schon Umbenannten Dateien nicht nochmal umbenannt werden,
egal ob dieses Verzeichnis noch ein Unterverzeichnis mit weiteren Umzubennenenden (hach schweres Wort - jedenfalls zum schreiben! gruß an Biber) Dateien enthält.


oder meintest Du
Zeile 05. if defined ORDNER if not "ORDNER:~-1"=="\" set "ORDNER=%ORDNER%\"
was ist wenn dann am ende vom Ordner der Backslash eingegeben wird ohne Prüfung

Datei umbenennen nach Ordner Unterstrich Dateiname und schon einmal umbenannte Dateien auslassen
01.
echo off & setlocal enabledelayedexpansion 
02.
set "PFAD=c:\np\" 
03.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
04.
set /p forsign=Welche(s) Zeichen soll entfernt werden: 
05.
if not defined forsign set /p inputsign=Welches Zeichen soll dafür eingesetzt werden: 
06.
::Falls bei der Eingabe vom Unterverzeichnis der Backslash fehlt wird dieser angefügt. 
07.
if defined ORDNER if not "ORDNER:~-1"=="\" set "ORDNER=%ORDNER%\" 
08.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%*.*') do call :lastDir "%%i" 
09.
echo Fertig! & pause 
10.
goto :eof 
11.
:: Herausfiltern des letzten Unterordners! 
12.
:lastDir 
13.
set "DirNr=1" & set "lastDir=%~p1" & set "file=%~n1" & set "lastDir=%~p1" 
14.
:filter 
15.
if not "%lastDir:~-%DirNr%,1"=="\" (set /a DirNr + = 1 & goto :filter ) 
16.
set /a FileNr = 1 + %DirNr% 
17.
if "!lastDir:~-%DirNr%,-1!_"=="!file:~%FileNr%!" rename "%%~1" "%ORDNER%_!file:%forsign%=%inputsign%!%~x1" 
18.
goto :eof
Bitte warten ..
Mitglied: bastla
24.06.2009 um 12:46 Uhr
@pieh-ejdsch
[OT]
Umzubennenenden (hach schweres Wort - jedenfalls zum schreiben! gruß an Biber)
Damit solltest Du seine Sammlung tatsächlich noch vergrößert haben ...
[/OT]

Grüße
bastla
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 13:02 Uhr
Also ich hab das jetzt so gebastelt:

01.
@echo off & setlocal 
02.
echo  ----------------------------------------------------------------- 
03.
echo.                                                                     
04.
echo   np.bat - Umbenennen von CAD-Dateien in c:\plan.assyst auf PC011    
05.
echo.                                                                   
06.
echo  ----------------------------------------------------------------- 
07.
echo. 
08.
echo. 
09.
 
10.
set "PFAD=c:\np\" 
11.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
12.
 
13.
rem 1.Schleife 
14.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do ( 
15.
    if "%%~nxi"=="%ORDNER%*.*" ( 
16.
     rename "%%i" "%ORDNER%_%%~nxi" )) 
17.
 
18.
rem 2.Schleife 
19.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do ( 
20.
    find "xx" >NUL 2>NUL | rename %%~nxi %%~nxi:xx=#% ) 
21.
 
22.
pause	
...und es funktioniert nichts.
Ich krieg das irgendwie nicht hin, weil ich die Logik vom Syntax nicht verstehe.

Das ist so abstrakt - bei PHP, C++, JAVA, Delphi usw. habe ich keine Probleme, aber hier tu ich mich richtig schwer.

Gibts gute Websites mit verständlichen Tutorials? In der Windows oder DOS Hilfe fehlts mir an konkreten Beispielen.

Achso, könntet ihr mein kleines Programm mal überarbeiten, oder weitere Tipps geben?

MfG watchdogg
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 13:52 Uhr
@ watchdogg

tja so ist das wenn man die Backslashes vergisst und die Tips zur Prüfung darauf ins Nirwana verbannt.
mit der integrierten Backslashprüfung brauchst Du deinen Backslash im weiteren Code nicht mehr einfügen.
oder gar darauf achten.
Zeile 15.    if "%%~nxi"=="%ORDNER% \ *.*" (
Zeile 20.    find "xx" >NUL 2>NUL | rename %%~nxi %%~nxi:xx=#%
ääähmmm Du willst in ForschleifenVariablen Zeichenfolgen ersetzen!
Das geht nicht. Das geht nur bei Variablen die Zur Darstellung Umgebende % oder ! benutzen!
Dazu must Du erst die FOR- oder BATCHerweiterungs-Variablen in eine UMGEBUNGSVariable setzen.
Warum das so ist weis nur der gute Bill allein.


ich find ja die komplette 2. Schleife Überflüssig und würde wenn du auf verzögerte Variablenerweiterung Verzichtest

01.
@echo off & setlocal 
02.
echo  ----------------------------------------------------------------- 
03.
echo.                                                                     
04.
echo   np.bat - Umbenennen von CAD-Dateien in c:\plan.assyst auf PC011    
05.
echo.                                                                   
06.
echo  ----------------------------------------------------------------- 
07.
echo. 
08.
echo. 
09.
set "PFAD=c:\np\" 
10.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
11.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do call :rename "%%i" 
12.
pause 
13.
goto :eof 
14.
:rename 
15.
set FILE=%~n1 
16.
if "%%~nxi"=="%ORDNER%*.*" rename "%~1" "%ORDNER:xx=#%_%FILE:xx=#%%~x1" 
17.
goto :eof
schreiben
xx im PreName werden auch durch # ersetzt.
war ja ohnehin bei Dir so.

Gruß Phil
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 14:13 Uhr
Danke Phil,

aber das tut so nicht.
Es werden keine Ordnernamen vor den Dateinamen gesetzt und auch keine xx durch # ersetzt !?!

Ich verzweifel noch.

MfG watchdogg
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 15:13 Uhr
ach das kommt davon wenn ichs nur kopiere und net neu schreibe!

*.* ist die Ursache in Zeile 16. und wie solles auch sein genau der fehlende Backslash.
und vllt noch etwas mehr.

ich schreib jetzt nicht nochmal eine andere Variante! es führen ja viele Wege nach Rom...
oder zur richtig umbenannten Datei.

So hier Die

Datei umbenennen zu Ordnername Unterstrich Dateiname mit Unterstrich und entfernen / ersetzen von Zeichen im Dateiname und auslassen schon Umbenannter Dateien.bat


01.
@echo off & setlocal enabledelayedexpansion 
02.
echo  ----------------------------------------------------------------- 
03.
echo.                                                                     
04.
echo   np.bat - Umbenennen von CAD-Dateien in c:\plan.assyst auf PC011    
05.
echo.                                                                   
06.
echo  ----------------------------------------------------------------- 
07.
echo. 
08.
echo. 
09.
set "PFAD=c:\np\" 
10.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
11.
if defined ORDNER if not "ORDNER:~-1"=="\" set "ORDNER=%ORDNER%\" 
12.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%*.*') do call :lastDir "%%i" 
13.
pause 
14.
goto :eof 
15.
:lastDir 
16.
set "DirNr=1" & set "lastDir=%~p1" & set "file=%~n1" & set "lastDir=%~p1" 
17.
:filter 
18.
if not "%lastDir:~-%DirNr%,1"=="\" (set /a DirNr + = 1 & goto :filter ) 
19.
set /a FileNr = 1 + %DirNr% 
20.
if "!lastDir:~-%DirNr%,-1!_"=="!file:~%FileNr%!" rename "%%~1" "%ORDNER%_!file:xx=#!%~x1" 
21.
goto :eof
Ich hoffe mal das die so geht.

[OT]
@bastla
gibt es denn schon eine Offizielle Liste von Biber von den verschiedenen Varianten?
[/OT]

Gruß Phil

[edit]
hier nochmal die modifizierte Von Miyamoto ohne delayedexpansion und ohne Schnörkel und nur umbenennung im Angegebenen Unterverzeichnis und ersetzen von xx mit # im Dateiname.

01.
set "PFAD=c:\np\" 
02.
set /p ORDNER=Bitte das Unterverzeichnis eingeben: 
03.
for /f "delims=" %%i in ('dir /s /b /a-d %PFAD%%ORDNER%\*.*') do call :rename "%%i" 
04.
pause 
05.
goto :eof 
06.
:rename 
07.
set "FILE=%~nx1" 
08.
if not exist "%ORDNER%_%~nx1" rename "%~1" "%ORDNER%_%FILE:xx=#%"
[/edit]
Bitte warten ..
Mitglied: bastla
24.06.2009 um 15:29 Uhr
@phil
[OT]
Bibers Zählung stand jedenfalls zuletzt etwa bei 403 ...
[/OT]

Grüße
bastla
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 15:52 Uhr
Ich will ja nicht nerven, aber Phils Lösung ergibt:

Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~ni1" & set "lastDir=%~p1" .
Geben Sie call /? oder for /? ein um herauszufinden welche Formate gültig sind.
":lastDir
"ist syntaktisch an dieser Stelle nicht verarbeitbar.

Sorry ABER:

call /? oder for /? == momentan noch sowas von "BAHNHOF"....

Mfg watchdogg
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 16:10 Uhr
%~ni1" & set "lastDir=%~p1"
wenn die Variable nicht mit ! oder % abschliesst wird diese als BatchparameterVariable oder FORschleifen Variable erkannt die zahlen 0 -9 kommen da am ende der Variable nur für Batchparameter in Frage.
mit dem i wird eine Erweiterung eingestellt die es aber so nicht gibt. Nur p n f x und so weiter steht im Help für FOR.

ja das ist beim umschreiben nicht richtig rausgegeangen mein Radiergummi hat net richtig funkioniert.

guck mal oben im vorletzten Thread habs gefixt.
Bitte warten ..
Mitglied: watchdogg
24.06.2009 um 16:12 Uhr
Vielen Dank für eure Mühen,

funktioniert jetzt.

MfG watchdogg
Bitte warten ..
Mitglied: miniversum
24.06.2009 um 18:15 Uhr
Ich habe ja lediglich das
%PFAD%%ORDNER%
in
%PFAD%\%ORDNER%
verändert.
Für den Fall das %PFAD% keine \ am Ende hat wird das ja durch das zwischen den Variabeln gesetzt, z.b. so: C:\Pfad\Ordner
Für den Fall das %PFAD% bereits ein \ am Ende hat wird das ja durch das zwischen den Variabeln gesetzte quasi Verdoppelt, z.b. so: C:\Pfad\\Ordner
Das stört aber nicht, da Windows, bzw. die cmd das trotzdem richtig macht. Drum ist hier auch keine Prüfung notwendig dann.
Bitte warten ..
Mitglied: pieh-ejdsch
24.06.2009 um 18:46 Uhr
@ miniversum

echt?
Hab ich gar net gewusst das mit dem backslash - dass sich mehrere zu einem machen.
nur das Dateien und Ordner NICHT mit
/ \ : * ? " < > und |
erstellt werden bzw es wird eine Fehlermeldung ausgeben.

danke für den Tipp.... bin ja auch nicht allwissend

@ watchdogg
Bitte setze den Beitrag auf gelöst!
Danke!
Bitte warten ..
Mitglied: bastla
24.06.2009 um 21:21 Uhr
@miniversum
Für den Fall das %PFAD% bereits ein \ am Ende hat wird das ja durch das zwischen den Variabeln gesetzte quasi Verdoppelt, z.b. so: C:\Pfad\\Ordner
Das stört aber nicht, da Windows, bzw. die cmd das trotzdem richtig macht.
Allerdings sollte dann in %PFAD% kein Root-Verzeichnis (also zB "C:\") stehen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Per VBA im Verzeichniss dateien mit Wildcard umbenennen (4)

Frage von usenussi zum Thema Microsoft Office ...

VB for Applications
gelöst VB Netzlaufwerk trennen und mappen klappt nicht so richtig (21)

Frage von Dr.Cornwallis zum Thema VB for Applications ...

Windows 7
gelöst Mehrere Dateien in Windows umbenennen mit Batchjob (4)

Frage von Jeduja zum Thema Windows 7 ...

Batch & Shell
gelöst Verschieben und Umbenennen von Video-Dateien anhand der Nummer im Namen (3)

Frage von Foja.Filmer zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...