Dies ist im Grunde eine Fortsetzung der beantworteten Frage, jedoch mit zusätzlicher Bedingung
Ordnernamen am Anfang des Dateinamens hinzufügen
Ich habe eine Verzeichnisstruktur wie folgt:
Folder
> SubFolder1xxxx
> FileName1.abc
> Filename2.abc
> .............
> SubFolder2xxxx
> FileName11.abc
> Filename12.abc
> ..............
> ..........
usw. Ich möchte die Dateien in den Unterordnern wie folgt umbenennen:
SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc
d.h. fügen Sie einen Teil des Ordnernamens mit dem Trennzeichen " " am Anfang des Dateinamens hinzu _
. Die Verzeichnisstruktur sollte unverändert bleiben.
Ich habe unten Skript
for /d %D in (*) do (
for %F in ("%~D\*") do (
for %P in ("%F\..") do (
ren "%F" "%~nxP_%~nxF"
)
)
)
Das Problem mit dem obigen Skript besteht darin, dass es den gesamten Ordnernamen übernimmt
Daher habe ich versucht, nur einen Teil des Dateinamens mit der Syntax substring zu extrahieren
%variable:~num_chars_to_skip,num_chars_to_keep%
Also habe ich damit den obigen Code geändert, aber es trat ein Fehler auf :(
for /d %D in (*) do (
for %F in ("%~D\*") do (
for %P in ("%F\..") do (
ren "%F" "%~nxP:~0,10%_%~nxF"
)
)
)
der Fehler liegt im Wesentlichen darin, dass die Syntax-Teilzeichenfolge nicht funktioniert, sie wird einfach als Zeichenfolge gedruckt. So etwas in der Art
SubFolder1xxxx:~0,10%
Antwort1
Beispiel-Batch, der den Ordnernamen der Batchdatei abruft.
@echo off
set a=%~p0%
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=\" %%a in ("%a%") do call :getlast %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :eof
:getlast
if "%1"=="" goto :eof
if "%2"=="" echo Current folder name is %1.
shift
goto :getlast
Aktuelle Einschränkungen: nicht mehr als 9 Unterordnerebenen (bearbeiten, bei Bedarf Lücken analysieren), keine Leerzeichen in Namen (bearbeiten, bei Bedarf Anführungszeichen hinzufügen).