apeman
Goto Top

Kopieren von txt Dateien in Ordner mit dem Namen der txt Datei

Hallo,

ich möchte mit einer batch Datei alle txt-Dateien aus dem Ordner Texte in den Ordner Neu kopieren, aber dort nicht einfach hinein, sondern immer in einen Unterordner mit dem Namen der darin befindlichen *.txt Datei. (Also : jede txt führt zu einen Ordner mit dem gleichen Namen)

Mein Problem ist jetzt, dass er mir die Ordner nicht erstellt und sie somit auch nicht mit der *.txt Datei füllen kann. Ich sehe aber nicht den Fehler in der Batch.

Bis jetzt bin ich so weit gekommen:


@echo off
setlocal

for %%i in ("Texte\*.txt") do (   

set "k=%%i:~0,-4%"  

md "%k%"  
echo %k%
 
copy "Texte\%i%" "Neu\%k%\%i%"  
)
pause


Schon mal vielen Dank im Voraus

Content-Key: 207704

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

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

Member: Endoro
Endoro Jun 08, 2013 at 07:26:10 (UTC)
Goto Top
Hallo Apeman,

mein Vorschlag:
@echo off
cd texte
for %%i in (*.txt) do (
    md "%%~ni"  
    copy "%%~i" "%%~ni"  
)

Jetzt könnte ich noch einen Spruch über die SuFu und Google dalassen, mach ich natürlich nicht, weil ich ein Netter bin.
Ich halt einfach mal die Klappe (Kurt Beck würde sagen "das Maul", aber da bin ich mir doch zu fein für face-smile )

Liebe Grüsse.
Member: Apeman
Apeman Jun 08, 2013 updated at 10:42:23 (UTC)
Goto Top
Hallo Endoro,

erst mal vielen Dank für die schnelle Antwort.

Prinzipiell funktioniert dein Vorschlag, das Problem ist nur dass er nicht nur die *.txt aus dem Ordner "Texte" raussucht sondern aus seiner Umgebung (cd ist schlecht weil ich nachher noch in dem alten Ordner etwas machen will) und dann Packt er die Neuen Ordner in den Ordner in dem sich die *.txt's befinden (einsortieren klappt aber).


Ändere ich jetzt den copy Pfad, erstellt er die Ordner findet den neu angelegten Pfad aber nicht.

@echo on

for %%i in (Texte\*.txt) do (
    md "Neu\%%~ni"  
    copy "Texte\%%~i" "Neu\%%~ni\"  
)



Und die zweite Sache ist, da ich den Namen der txt ohne die Endung nachher noch brauche, wollte ich ihn gerne als Variable ablegen ,was aber in meinem oberen script nicht klappt. Ich verstehe aber nicht warum.

Gruß

Apeman
Member: Endoro
Endoro Jun 08, 2013 updated at 11:05:38 (UTC)
Goto Top
Also z.B. so (Pfad sollte bei cd angepasst werden):
@echo off
cd /d "X:\users\user\documents and settings\texte"  
for %%i in (*.txt) do (
    set "filename=%%~ni"  
    set "fileextension=%%~xi"  
    setlocal enabledelayedexpansion
    md "!filename!"  
    copy "!filename!!fileextension!" "!filename!"  
    endlocal
)

€dit:
Zitat von @Apeman:
cd ist schlecht weil ich nachher noch in dem alten Ordner etwas machen will

Da passt pushd:
@echo off
pushd "X:\users\user\documents and settings\texte"  
for %%i in (*.txt) do (
    set "filename=%%~ni"  
    set "fileextension=%%~xi"  
    setlocal enabledelayedexpansion
    md "!filename!"  
    copy "!filename!!fileextension!" "!filename!"  
    endlocal
)
popd   &rem zurück zum Ausgangsordner

Gruss!
Member: Apeman
Apeman Jun 08, 2013 at 11:07:45 (UTC)
Goto Top
Super! das kommt dem schon mal sehr nahe.

Mein Problem ist halt noch, dass ich eben schlecht mit cd arbeiten kann (glaube ich zumindest), da ich alles in einem relativen Pfad haben muss und da ich auf die Ebene in der sich die batch befindet noch zugreifen muss. (jede text Datei muss mit einer exe gestartet werden und deren Output aus dem Ordner in dem auch die batch ist kopiert und genauso wie die txts einsortiert werden)

Oder müsste ich dann in der Schleife mit „cd“ immer hin und her springen?

Wenn ich das so versuche zu adaptieren:

@echo off
setlocal


for %%i in ("Texte\*.txt") do (   

    set "filename=%%~ni"  
    set "fileextension=%%~xi"  
    setlocal enabledelayedexpansion
    md "Neu\!filename!"  
 
    copy "Texte\!filename!!filenameextension!" "Neu\!filename!"  
    endlocal
)

sagt er mir er kann den Ordner nicht finden

ich hätte vielleicht sofort sagen sollen was ich noch alles damit machen will.

Gruß
Member: Apeman
Apeman Jun 08, 2013 at 11:23:52 (UTC)
Goto Top
da haben wir wohl relativ zeitgleich geschrieben.

Um auf deinen Edit ein zu gehen:

Auch da packt er dann die neuen Ordner in den "Texte" Ordner, sie sollen aber in den Ordner "Neu", so wie ich es immer wieder in meinen Scripten versuche.
Dort findet er aber die neu angelegte Ordnerstruktur nicht und ich sehe den Fehler nicht

Ordner Struktur:

/batch Darin befindet sich die batch
/batch/Texte darin sind die Texte
/batch/Neu da sollen die neuen ordner und die neuen txt's rein
Member: Apeman
Apeman Jun 08, 2013 at 11:44:04 (UTC)
Goto Top
Ich hab es hinbekommen.

Dank deines Tipps mit:

setlocal enabledelayedexpansion

Klappt das Script jetzt so wie ich es haben möchte.

@echo off

for %%i in (Texte\*.txt) do (
    set "filename=%%~ni"  
    set "fileextension=%%~xi"  
    setlocal enabledelayedexpansion
    
    md "Neu\!filename!"  
    
    copy "Texte\!filename!!fileextension!" "Neu/!filename!"  
    endlocal
)

Vielen Dank!!!!
Member: Endoro
Endoro Jun 08, 2013 at 11:51:05 (UTC)
Goto Top
In Batch kannst du einfach so eine Variable verwenden, ohne sie zu deklarieren.
Sie wird dann als Leerstring oder im Fall von set /a mit "0" initialisiert:

copy "Texte\!filename!!filenameextension!" "Neu\!filename!"   

In diesem Fall ist !filenameextension! einfach leer.

Gruss!
Member: Apeman
Apeman Jun 08, 2013 at 13:33:52 (UTC)
Goto Top
Ah ok.

Vielen Dank nochmal!!

Meinetwegen kann der Thread dann auch geschlossen werden
Member: bastla
bastla Jun 08, 2013 updated at 22:47:21 (UTC)
Goto Top
... wobei (wie von Endoro oben gezeigt) die zusätzlichen Variablen (und damit "delayedExpansion") ja gar nicht nötig wären, und mit "xcopy" auch automatisch der Zielordner erstellt würde:
@echo off

for %%i in (Texte\*.txt) do xcopy "%%i" "Neu\%%~ni\"  
Grüße
bastla