Fügen Sie einen Teil des Ordnernamens am Anfang des Dateinamens hinzu

Fügen Sie einen Teil des Ordnernamens am Anfang des Dateinamens hinzu

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).

verwandte Informationen