Batch Dateinamen in Unterordnern mit dem Ordnernamen erweitern

subway2002

Newbie
Registriert
Okt. 2014
Beiträge
4
Hallo Leute!

ich bin neu in diesem Forum und suche eine möglichkeit via Batch-Rename mehrere Dateinamen mit den 2 übergeordneten Ordnernamen zu erweitern.
Ich habe scho nein bisschen im Forum gesucht allerdings nciht das richtige gefunden. Dazu muss ich sagen das ich wenig Ahnung von Batch Programmen?! bzw. Windows-Shell habe.

Kleines Beispiel für das Problem:

In einem Ordner sind mehrere Unterordner in denen die zu verändernden Dateien sind. Es sind immer drei Dateien mit den Endungen *.$101, *.$102, *.$103

c:\test\1.2\34DOLE\Dateiname1.$101
c:\test\1.2\34DOLE\Dateiname2.$102
c:\test\1.2\34DOLE\Dateiname3.$103

Am Ende sollen die Dateien vorzugsweise im obersten Ordner sein (hier "test").
Neue Namen wären:

1.2_34DOLE_Dateiname1.$101
1.2_34DOLE_Dateiname2.$102
1.2_34DOLE_Dateiname3.$103

Meine Test sie wie folgt aus:

for %%* in (.) do set CurrDirName0=%%~n*


for %%* in (.) do set CurrDirName=%%~n*
::for %%* in (..) do set CurrDirName2=%%~n*


echo %CurrDirName%
::echo %CurrDirName2%

for /f %%* in (.) do set CurrDirName3=%%~n*
set "prefix=%CurrDirName0%_%CurrDirName3%"
set "rootdir=%CD%"
set "filefilter=*.$10*"
FOR /F "delims=" %%i in ('dir "%rootdir%\%filefilter%" /B^|findstr /V /I /B "%prefix%"') do ren "%%~fi" "%prefix%%%~nxi"

::For /F "Delims=" %%i in ('dir *.$10* /b /s') do move "%%i" ..

)

pause


Für jeden Tipp bin ich dankbar!

Viele Grüße,
Subway
 
Falls du Java hast:




import java.io.File;
import java.io.FileFilter;

public class Rename {
public static void main(String[] args) {

File root = new File(".");
doFolder(root, root);
}

private static void doFolder(File file, File root) {
File[] listFiles = file.listFiles(new FileFilter() {

@Override
public boolean accept(File file) {

if (file.isDirectory()) {
return true;
}
else if (file.getName().contains(".$10")) {
return true;
}

return false;
}
});
for (File file2 : listFiles) {

if (file2.isDirectory()) {
doFolder(file2, root);
}
else {
File dest = new File(root, file2.getParentFile().getParentFile().getName() + "_"
+ file2.getParentFile().getName() + "_" + file2.getName());
file2.renameTo(dest);
}
}
}
}




EDIT: Code angepasst und getestet, sollte gehen.
 
Zuletzt bearbeitet:
Moin gozza,

als erstes schon einmal vielen Dank!

Noch habe ich kein Java...aber wie kann ich das kleine Programm schnell einbinden?

Viele Grüße,
subway
 
Hier als Batch.
Code:
@echo off
set "home=%cd%"
for /F %%a in ('dir /A:D /B') do (
	cd "%home%\%%a"
	for /F %%b in ('dir /A:D /B') do (
		cd "%home%\%%a\%%b"
		for %%c in ("*.$10*") do (move %%c ..\..\%%a_%%b_%%c)
	)
)

cd %home%
pause

Da fällt mir auf, ich hab ja die variablen upper_dir und lower_dir gar nicht mehr gebraucht, also raus damit.
Und dann auch noch Unterstriche im neuen Namen...
 
Zuletzt bearbeitet:
simpsonsfan schrieb:
Hier als Batch.
Code:
@echo off
set "home=%cd%"
for /F %%a in ('dir /A:D /B') do (
	cd "%home%\%%a"
	for /F %%b in ('dir /A:D /B') do (
		cd "%home%\%%a\%%b"
		for %%c in ("*.$10*") do (move %%c ..\..\%%a_%%b_%%c)
	)
)

cd %home%
pause

Da fällt mir auf, ich hab ja die variablen upper_dir und lower_dir gar nicht mehr gebraucht, also raus damit.
Und dann auch noch Unterstriche im neuen Namen...

Vielen Dank für den Code.
Leider funktioniert der Code nicht bei mir. Edit: Funktioniert super!! Hatte die .bat im falschen Ordner.

Vielen vielen Dank noch einmal!!

@gozza: Der Link funktioniert, leider das Programm nicht. "unsupported major.minor version 51.0 ..."

Hat sonst noch jemand eine Idee?

Viele Grüße
 
Zuletzt bearbeitet:
'Leider funktioniert der Code nicht' ist leider nicht sehr aussagekräfitg. Was wird denn dann ausgeben, zum Test auch einfach mal echo angeschaltet und geguckt, was passiert?

Und du musst die Batch natürlich auch von deinem "root"-Ordner, also in deinem Beispiel c:\test, aus ausführen, was ja aber ersichtlich sein dürfte.
 
Sorry für die Verwirrung!

Habe es jetzt noch durch copy statt move ersetzt.

Wie könnte ich noch einen neuen Ordner generieren in dem die Dateien landen?
 
Oh, wolltest du die Dateien kopieren, nicht verschieben? Oder hat es mit move nicht geklappt?

Wie dem auch sei, einen neuen Ordner müsstest du einfach in den Pfad mitreinschreiben also bei move bzw. copy.
 
Zurück
Oben