striding
Goto Top

Textdateien automatisch erstellen und nach Ordner benennen

Hallo Administrator-Community!

Ich stelle hier meine Frage, weil ich von Batch-Dateien leider keine Ahnung habe, sie aber warscheinlich mein "Problem" lösen.

Ich habe eine externe Festplatte mit einem Haufen Unterordner. Da ich sie nicht immer an- und abstöpseln möchte, würde ich mir gerne für jeden Ordner eine Text-Datei mit dem gleichen Namen erstellen.
Ein Beispiel:
Ordnername: Winterurlaub (2012)
Daraus möchte ich ein Textdokument mit dem gleichen Name (Winterurlaub (2012).txt) machen. Also einfach nur ein leeres Textdokument, mit einem Namen.
Am besten eine Batchdatei, die aus allen Unterordnern jeweils eine Testdatei erstellt.
Ist soetwas überhaupt möglich?
Wann ja, könnte mir jemand weiterhelfen?

Freundliche Grüße

Striding

Content-Key: 222930

Url: https://administrator.de/contentid/222930

Printed on: April 19, 2024 at 01:04 o'clock

Member: schmitzi
schmitzi Nov 25, 2013 at 20:18:27 (UTC)
Goto Top
na klar. Sollte gehen.

Wo sollen die TXTs denn landen ?
(Denke, auf der lokalen Platte, und nicht auf der USB (nennen wir es Uface-smile wegen abklemmen)

OK. Sollen die TXTs (sagen wir mal auf Cface-smile "flach" in EINEM Ordner landen ?
(was ein Problem bei gleichen Ordnernamen in unterschiedlichen Ordnern ergeben würde)

Oder soll die Ordnerstruktur der USB-HDD quasi LEER abgebildet und in jedem
Zielordner halt nicht die Dateien, sondern nur die eine, jeweilige TXT stehen ?
Member: bastla
bastla Nov 25, 2013 at 20:20:31 (UTC)
Goto Top
Hallo striding und willkommen im Forum!

An sich durchaus machbar - offen ist aber jedenfalls die Frage, ob diese Dateien alle in einem einzigen Ordner erstellt werden sollen, und wenn ja, was bei Namensgleichheit geschehen sollte ...

... und außerdem: Sollen diese Dateien auch einen Inhalt haben?

Grüße
bastla
Member: striding
striding Nov 25, 2013 at 20:40:47 (UTC)
Goto Top
Danke für die schnelle Antwort!
Das klingt schonmal super!
Ja, auf dem Desktop sind sie immer schnell zu finden.

Dass sie in einem Ordner landen, wäre ideal, als ich die Ordner nach und nach erstellt habe, habe ich darauf geachtet, dass kein Name doppelt vorkommt.

Hm, es sollten keine neuen Ordner erstellt werden, nur Textdokumente mit dem Namen des jeweiligen Ordners, wobei die Textdatei leer ist.
Bsp:
Aus dem Ordner "Winterurlaub (2012)" (200MB) (Pfad: F (oder U):\Urlaubsbilder)
soll "Winterurlaub (2012).txt" (0Bytes) (Pfad: C:\Users\XY\Desktop\ExterneFestplatte_F\Urlaubsbilder) werden.
Aus dem Ordner "Sommerurlaub (2012)" (150MB) (Pfad: F (oder U):\Urlaubsbilder)
soll "Sommerurlaub (2012).txt" (0Bytes) (Pfad: C:\Users\XY\Desktop\ExterneFestplatte_F\Urlaubsbilder) werden
Member: bastla
bastla Nov 25, 2013 updated at 20:57:59 (UTC)
Goto Top
Hallo striding!

Wenn demnach die Ordnerstruktur übernommen werden soll (dann kann es auch keine Kollisionen mit gleichen Namen geben), (ungetestet) etwa so:
@echo off & setlocal
set "Quelle=F:\"  
set "Ziel=%userprofile%\Desktop\ExterneFestplatte_F"  

for /d /r "%Quelle%" %%i in (*) do set "Pfad=%%~fi" & call :ProcessDir "%%i"  
goto :eof

:ProcessDir
call set "PfadRel=%%Pfad:%Quelle%=%%"  
md "%Ziel%\%PfadRel%\" 2>nul && copy nul "%Ziel%\%PfadRel%\%~nx1">nul  
goto :eof
Grüße
bastla
Member: striding
striding Nov 25, 2013 at 22:00:02 (UTC)
Goto Top
Hallo bastla!
Vielen Danke für die Hilfe!

Habe es natürlich gleich ausprobiert, und es funktioniert im Großen und Ganzen.
Zwei Sachen sind mir aber aufgefallen:

Zum einen sind das in den Ordnern keine Text-Dateien, sondern Dateien ohne Endungen.

Zum anderen sind Ordner erstellt worden, was von Dir auch beabsichtigt war. Das war mein Fehler, da ich den Ordner auf dem Desktop genauso genannt habe.
Ich versuche nochmal ein Beispiel zu geben bzw das vorhandene zu verbessern:

Aus dem Ordner "Winterurlaub (2012)" (200MB) (Pfad: F:\Urlaubsbilder\2012)
soll "Winterurlaub (2012).txt" (0Bytes) (Pfad: C:\Users\XY\Desktop\ExterneFestplatte_F\) werden.

Die Ordnerstrukturen sollen nicht übernommen werden, es sollen alle Daten die sich auf F:\ befinden, in den einen Ordner auf dem Desktop (ExterneFestplatte_F) zusammengeschmissen werden.

Falls man eine "Sicherung" vor Kollisionen bei Namen einbauen muss, wäre der gleiche Name mit einem "_01", "_02" super. Zwei Stellen sollten ausreichen.
Bsp:
Antigua_Barbuda_DSC149
Antigua_Barbuda_DSC149_01
Antigua_Barbuda_DSC149_02
Member: schmitzi
schmitzi Nov 25, 2013 updated at 22:52:14 (UTC)
Goto Top
Hi, nur falls das interessant ist, hiermit kannst Du Dir ein Textfile mit der Ordnerstruktur erstellen:
(bei englischen Windows muss Du "Verzeichnis von" noch übersetzen)
@ECHO OFF
SETLOCAL EnableDelayedExpansion
MD C:\BATCHES

SET SOURCEFOLDER=U:\
SET TARGETFILE=C:\Batches\verzeichnisliste.txt
SET KOMMANDO=dir %SOURCEFOLDER% /s

REM DELETE AND GENERATE TARGETFILE
ECHO LIST OF MY DIRECTORIES ON %SOURCEFOLDER%  -  %DATE% - %TIME:~0,-3% >%TARGETFILE%
ECHO =============================================================================== >>%TARGETFILE%

REM LOOP-DI-LOOP
FOR /f "tokens=* delims=" %%a IN ('%KOMMANDO% ^|find "Verzeichnis von"') DO (  
                 CALL :SPLITSTRING "%%a"  
)
GOTO ENDE

REM EXTRACT FOLDERNAME FROM STRING
:SPLITSTRING
SET TMPSTRING=%1
SET RESULTSTR=%TMPSTRING:~18,-1%
ECHO %RESULTSTR% >>%TARGETFILE%
goto :EOF


:ENDE
pause
@ECHO.
type %TARGETFILE%
@ECHO.

pause

REM VIEL SPASS >>:O)
Member: bastla
bastla Nov 25, 2013 at 22:06:31 (UTC)
Goto Top
Hallo striding!

Dann also eher:
@echo off & setlocal
set "Quelle=F:\"  
set "Ziel=%userprofile%\Desktop\ExterneFestplatte_F"  

md "%Ziel%" 2>nul  
for /d /r "%Quelle%" %%i in (*) do call :ProcessDir "%%i"  
goto :eof

:ProcessDir
set "Suffix="  
set /a Nr=1000
:Test
if not exist "%Ziel%\%~nx1%Suffix%.txt" goto :Schreiben  
set /a Nr+=1
set "Suffix=_%Nr:~-2%"  
goto :Test

:Schreiben
copy nul "%Ziel%\%~nx1%Suffix%.txt">nul  
goto :eof
Grüße
bastla
Member: bastla
bastla Nov 25, 2013 updated at 22:24:03 (UTC)
Goto Top
Hallo schmitzi!

Nur für den Fall, dass es mal schnell gehen muss:
dir /s/b/ad "%SOURCEFOLDER%">>"%TARGETFILE%"
... und "delayedExpansion" wäre auch nicht nötig gewesen ...

Grüße
bastla
Member: schmitzi
schmitzi Nov 25, 2013 at 22:35:57 (UTC)
Goto Top
Hi Bastla,

ach, deshalb sind meine Batches immer gleich 5 Kilometer lang :O))

Aber warum einfach wenn es auch komplizert geht

Danke für den Hinweis, wer /? eingeben kann ist klar im Vorteil :O)

Gruss
RS

</flachs>
PS: oder man gibt format u /s ein, dann kann man die Liste auch schnell von Hand schreiben.
</flachs>
Member: striding
striding Nov 25, 2013 at 22:36:58 (UTC)
Goto Top
Perfekt!
Danke euch beiden basta und schmitzi!