Forum: PC-Programmierung DOS-Befehle für Datei verschieben


von Nils (Gast)


Lesenswert?

Hi,

ich bin gerade dabei, ein kleines Tools zu schreiben das mir diverse 
Datei auf der Festplatte C: in einem Ordner verschiebt. Sin und zweck 
soll es sein, dass temporäre Datein entfernt werden. Um nicht 
versehentlich falsche daten gelöscht werden dachte ich eben erst 
verschieben und dann nach Überprüfung löschen...

move "c:/"*.tmp c:/move/ >c:/move/verschoben/%date%.txt

Nun gibt es 2 Problem die nicht so funktionieren.

Wenn ich eine Datei erstelle test.tmp und das Script darauf anpasse

move "c:/"*.tmp c:/move/ >c:/move/verschoben/%date%.txt

Dann wird die Datei test.tmp verschoben. Die Datei mit dem Datum wird 
auch erstellt, aber diese bleibt leer und es ist kein Eintrag drin. Was 
mache ich da falsch?

So, das andere ist, dass wenn ich versuche c:/*.tmp zu löschen, dass 
diese auf C: liegen muss. Wie kann ich die Ordner und Unterordner 
durchsuchen lassen?

LG Nils

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du verwendest kein DOS, sondern den Befehlsprozessor von Windows. Dieser 
ist recht gut dokumentiert, die einzelnen Befehle, ihre Optionen und 
auch Beispiele sind auch in der integrierten Hilfe beschrieben.

move /?
del /?

sollten mehr über sich verraten.

von asdf (Gast)


Lesenswert?

versuch mal
move c:\*.tmp c:\move\ > "c:\move\verschoben\%date%.txt"
(habs nicht getestet)

>So, das andere ist, dass wenn ich versuche c:/*.tmp zu löschen, dass
>diese auf C: liegen muss. Wie kann ich die Ordner und Unterordner
>durchsuchen lassen?

???
Schreib nochmal genauer was du machen willst. Willst du auf c:\ 
tmp-Dateien löschen oder in Unterordnern?

von Nils (Gast)


Lesenswert?

Geht leider auch nicht... Ich habe schon den ganzen abend mit Klammern 
u.ä. rumhantiert. Das angelegte Textfile bleibt aber leer.

Ich möchte alle Dateien auf C: überprüfen lassen ob diese mit .tmp enden 
und wenn ja, dann verschieben.

von asdf (Gast)


Lesenswert?

habs bei mir getestet, es funzt:
hab 2 Dateien mit der Endung tmp auf c:\, Ordner move und verschoben 
erstellt,
win+r gedrückt, die oben von mir gepostete zeile eingefügt
Ergebnis: Dateien verschoben und in txt-file die 2 dateien eingetragen.

Mit dir /s *.tmp kannst du dir alle tmp-Dateien anzeigen lassen.

von asdf (Gast)


Lesenswert?

Nachtrag: nachdem ich win+r gedrückt hab, hab ich erst cmd eingegeben

von asdf (Gast)


Lesenswert?

Hilfe zu den Befehlen bekommst du auch unter Start->Hilfe und Support

von Nils (Gast)


Lesenswert?

Hab es jetzt so gelöst...

md c:\move\%date%\del
move "c:\"*.tmp "c:\move\%date%\" >"c:\move\%date%\del\geloescht.txt

Das script wird dann beim beenden von Windows ausgeführt da Windows auf 
manche Datein noch Zugriffsrechte hat.

Bei mir geht es jedenfalls nicht...

Den Rest muss ich mal weiter testen und probieren

von Nils (Gast)


Lesenswert?

Ich habe eine Datei auf c:/tztz/z.tmp

die wird nicht mit gelöscht

von Nils (Gast)


Lesenswert?

hat keiner weitere Anregungen?

von Ronald (Gast)


Lesenswert?

Mich interessiert das auch. Speziell noch mit der Erfordernis, daß die 
Dateien in alphanumerischer Reihenfolge (also gleich noch sortiert) 
verschoben werden. Denn in der zufälligen Reihenfolge, wie die auf der 
Platte liegen will ich das nicht haben!

Mei mir funktioniert zwar der Befehl:
1
move h:\dcim\100casio\moved\*.jpg h:\dcim\100casio\
Doch die Dateien werden bunt durcheinander verschoben.

h:\dcim\100casio\CIMG0049.JPG
h:\dcim\100casio\CIMG0050.JPG
h:\dcim\100casio\CIMG0028.JPG
h:\dcim\100casio\CIMG0051.JPG
h:\dcim\100casio\CIMG0052.JPG
h:\dcim\100casio\CIMG0036.JPG

Wie kann man die Sortierung erzwingen?

von Gerry E. (micky01)


Lesenswert?

Ronald schrieb:
> Mich interessiert das auch. Speziell noch mit der Erfordernis, daß die
> Dateien in alphanumerischer Reihenfolge (also gleich noch sortiert)
> verschoben werden. Denn in der zufälligen Reihenfolge, wie die auf der
> Platte liegen will ich das nicht haben!

Ich glaube nicht, dass das geht. Im Inhaltsverzeichnis eines Ordners 
sind die Einträge regelmäßig unsortiert gespeichert. Erst die 
Anzeigefunktion des "Explorers" sortiert die Namen. Und wie der Benutzer 
das dann sieht, dafür gibt es doch die Einstellungen.

von Ronald (Gast)


Lesenswert?

Es sollte aber gehen, da sich eine Dateiliste erzeugen und diese 
sortieren läßt. Würde man jede Datei einzeln von Hand verschieben, 
ergäbe das auch das Ziel.

Für AmigaOS kann ich jedenfalls eine batch-datei schreiben, die das 
gewünschte erreicht.
Vereinfacht ohne Fehlerabfragen sähe das etwa so aus:
1
list LW:path lformat "move %s%s ZielLW:path" >movefiles.bat
2
sort movefiles.bat
3
execute movefiles.bat
4
delete movefiles.bat
List ist dabei ein ähnlicher Befehl zu DIR mit anders formatierbaren 
Ausgaben. LFORMAT erlaubt die Festlegung des Zeilenaufbaus, so daß sich 
damit auch HTML-Listen erzeugen ließen. %s%s ist der Platzhalter für 
Pfad+Dateiname, %s einzeln nur Dateiname.
z.B. mit
list LW:path lformat "(a href-%s%s)%s(/a)(br)" >filelist.html ließe sich 
eine HTML-Liste erzeugen deren Zeilen dann so aussehen:

(a href-Pfad/Dateiname.ext)Dateiname.ext(/a)(br)

Wie man soetwas mit MSDOS erreichen kann weis ich nicht. Deßhalb frage 
ich ja. (Ich mußte hier runde Klammern nehmen, weil html verboten ist.)

MyDefrag bietet ja auch eine  Möglichkeit beim defragmentieren die 
Dateien alphabetisch zu sortieren. Warum also nicht gleich beim 
Kopieren/Verschieben sortiert übergeben?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ronald schrieb:
> MyDefrag bietet ja auch eine  Möglichkeit beim defragmentieren die
> Dateien alphabetisch zu sortieren.
... Ja das erhöht bestimmt die Zugriffsgeschwindigkeit, dann muß der PC 
nicht so lange suchen weil alles so unordentlich rumliegt ...
> Warum also nicht gleich beim
> Kopieren/Verschieben sortiert übergeben?
Was soll das den bringen? Nur "der Ordnung halber" oder was? Dem PC ist 
es doch völlig egal in welcher Reihenfolge du das kopierst...
Ansonsten kannst du auch mit DIR eine Dateiliste "sortiert" ausgeben 
lassen, in eine Datei schreiben und dann zeilenweise lesen und für eine 
kopieroperation verwenden. Google doch einfach mal nach "Batchfile" oder 
"dir commandline options"...

von Sven (Gast)


Lesenswert?

Muss es denn zwingend auf den Windows Konsolenbefehlen basieren?

von Ronald (Gast)


Lesenswert?

Sven schrieb:
> Muss es denn zwingend auf den Windows Konsolenbefehlen basieren?

Worauf denn sonst, wenn man mit Windows arbeitet?

Läubi schrieb:
> Was soll das den bringen? Nur "der Ordnung halber" oder was?
Ja und wegen der (De)Fragmentierung.
Liegen die Dateien wild verstreut auf der Platte, dann werden beim 
löschen lauter kleine Löcher frei, wenn man einen ganzen Ordner löscht. 
Liegen sie Sortiert for, wird ein größere, zusammenhängender Bereich 
frei.

Diese viele kleinen Lücken werden doch immer zuerst von vorne her 
gefüllt mit neuen Dateien, auch wenn die viel größer sind als rein paßt. 
Das führt immer wieder zu neuen Fragmentierungen. auch nach der 
Defragmentierung von windows, was ja nur die dateien defragmentiert, für 
die gerade ausreichend große Lücken zu finden sind, reißt aber wieder 
die kleinen Lücken auf und füllt die Platten nie sinnvoll. Die Funktion 
SortbyName() von Mydefrag bringt zwar diese alphanumerische Ordnung 
rein, braucht aber pro GB rund eine Stunde. Bei einer fast vollen 
Partition von 32 GB dauert das also mehr als einen Tag! Bei meiner 360 
GB Partition wohl eine ganze Woche.

> Ansonsten kannst du auch mit DIR eine Dateiliste "sortiert" ausgeben
lassen,...

Das weis ich. Auch das man das auf die reinen Pfade:Dateinamen (ohne 
Zusatzinfos) und sortiert schreiben kann. Soweit bin ich schon. doch wie 
bekomme ich das hin das vor diesen Dateinamen der Befehl "move " 
eingefügt wird und dahinter das " ZIEL:"? Damit ich nicht jedesmal alles 
von hand einfügen muß!?
Diese neue Datei soll dann als Batchdatei ausgeführt werden können, und 
nicht jede Zeile Von hand kopiert werden.

Oder soll ich das etwa lieber vom Amiga-Emulator aus machen? Das ginge, 
wenn ich einstelle "alle Windowslaufwerke einbinden".

Sowas habe ich früher schon mal gemacht um aus allen HTML-Dateien in 
beliebigen Unterverzeichnissen der Windowspartitionen mit unbestimmten 
Dateinamen auf einen Rutsch alle unerwünschten HTML-ads oder 
JavaScript-Teile zu entfernen. Ohne daß ich dafür jede Datei einzeln 
öffnen und die Stellen suchen und ersetzen mußte.
Mit AmigaDOS geht vieles sowas problemlos, mit Linux(en) wohl auch.
Ich hoffe aber das auch mit MSDOS machen zu können.

von Sven (Gast)


Lesenswert?

Ronald schrieb:
> Worauf denn sonst, wenn man mit Windows arbeitet?

Nunja, bei c# hast du z.B. einen Namespace mit diversen Klassen und 
Methoden für den Dateizugriff mit denen man solche Sortier- und 
Kopieraufgaben mit Leichtigkeit erledigen kann.
Sicherlich gibt es auch für fast alle anderen Programmiersprachen solche 
Bibliotheken.

von bla (Gast)


Lesenswert?

Oje, das sieht mir ziemlich böse aus was du da machst, morgen beklast du 
dich dass deine Daten verloren sind.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ronald schrieb:
> Läubi schrieb:
>> Was soll das den bringen? Nur "der Ordnung halber" oder was?
> Ja und wegen der (De)Fragmentierung.
> Liegen die Dateien wild verstreut auf der Platte, dann werden beim
> löschen lauter kleine Löcher frei, wenn man einen ganzen Ordner löscht.
> Liegen sie Sortiert for, wird ein größere, zusammenhängender Bereich
> frei.
Autsch Autsch Autsch... wer erzählt den so einen Quatsch?
Das hat überhaupt nix mit dem Dateinamen zu tun und was du oder ich 
vielleicht unter einer Alphabetischen Ordnung verstehen!
Wenn du es nur deshalb machen willst vergiss es. Optimieren (auch im 
Sinne der Fragmentierung) kannst du höchstens indem du dein Backup 
packst (und ggf. komprimierst) weil dann effektiv weniger Cluster belegt 
werden.

Auch der rest bzgl Windows Defrag ist wohl eher Marketing von MyDefrag 
als den da wirklich was hinter steht...

>> Ansonsten kannst du auch mit DIR eine Dateiliste "sortiert" ausgeben
> lassen,...
> Das weis ich. Auch das man das auf die reinen Pfade:Dateinamen (ohne
> Zusatzinfos) und sortiert schreiben kann. Soweit bin ich schon. doch wie
> bekomme ich das hin das vor diesen Dateinamen der Befehl "move "
1
DIR /B > balabla.txt
und dann:
Laut http://en.kioskea.net/forum/affich-44079-batch-file-to-read-files 
soll es so gehen, wie gesagt einfach mal nach batchfile googlen...
1
@ echo off
2
set TEXT_T="blabla.txt"
3
for /f "eol= tokens=* delims= usebackq" %%i in
4
(%TEXT_T%) do (
5
echo move %%i
6
)

von Ronald (Gast)


Lesenswert?

Hallo Läubi,

ich sehe jetzt keinen Sinn darin tiefer über Defragmentierung zu 
Streiten. Das Script, was ich will, ist auch nicht zur defragmentierung 
gedacht, sondern soll bei einem leeren Datenträger die Dateien gleich 
sortiert schreiben. Nicht mehr nicht weniger.
Und dein allerletzter Absatz scheint den Code zu enthalten, den ich 
suche: zeilenweise Zeichenketten bearbeiten. Dankeschön ;)
Aber die Zeile erscheint umgebrochen. Ist den der Teil:
1
for /f "eol= tokens=* delims= usebackq" %%i in (%TEXT_T%) do (
als EINE Zeile zu verstehen?
Und dann nächste Frage: sollte die Zeile nicht eigentlich so aussehen?
1
echo move %%i <ZIEL-Platzhalter>
 %%i steht wohl für jede Zeile.
Da ich in der Batchdatei die zwei Parameter auswerten will, die in 
Commandozeile übergebenwerten soll der Aufruf ja etwa so aussehen

verschiebe.bat [Quelle:] [Ziel:]

ergäbe den Inhalt am Anfang:
1
@ECHO OFF
2
:anfang
3
IF "%1"=="" GOTO ende
4
IF "%2"=="" GOTO fehler
5
DIR /b %1 > blabla.bat
6
...(
7
echo move %%i %2
8
)
9
...
10
call blabla.bat
11
(ewentuell weitere Befehle)
12
:fehler
13
echo "2. Parameter fehlt!"
14
:ende
15
echo fertig.
16
EOF
 Bin ich damit jetzt auf dem richtigen Weg?

Nach batchfiles habe ich gegoogelt und bin auf diese Seite gestoßen.

In C# will ich das auch nicht schreiben, weil ich weder einen compiler 
habe, noch weis wie das zu schreiben sei.

(und wie WinXP defragmentiert kann man ja zuschauen. Das mit den vielen 
buntern senkrechten Strichen... Dazu braucht man kein Marketing von 
Fremdanbietern.;))

von Ronald (Gast)


Lesenswert?

So, in dieser Form_ _funktioniert es so, wie ich mir das vorstellte:
1
@ECHO OFF
2
:anfang
3
IF "%1"=="/?" GOTO help
4
IF "%1"=="" GOTO fehler
5
IF "%2"=="" GOTO fehler2
6
REM Dieser Befehl erzeugt eine Pfad:Datei-Liste ohne Zusatzinfos und aber sortiert.
7
dir /N /b /S /O:N /X %1 > Dateiliste.txt
8
set TEXT_T="Dateiliste.txt"
9
for /f "eol= tokens=* delims= usebackq" %%i in (%TEXT_T%) do (
10
move %%i %2
11
)
12
REM die folgende Zeile kann auskommentiert werden
13
call notepad Dateiliste.txt
14
GOTO ende
15
REM (ewentuell weitere Befehle)
16
:help
17
echo move2.bat $VER:1.0 vom 17.05.2010
18
echo Nutzen: Dateien und Ordner in sortierter Form verschieben.
19
echo Dateien und Ordner liegen oft in unsortierter Reihenfolge auf Datentraegern.
20
echo Dadurch werden sie auch unsortiert kopiert oder verschoben.
21
echo Dieses Script schafft Abhilfe und schreibt diese auf leeren oder gut
22
echo defragmentierten Datentraegern in alphanumerischer Reihenfolge.
23
echo.  
24
echo SYNTAX: move2.bat [Quelle:] [Ziel:] 
25
echo.  
26
GOTO ende
27
:fehler
28
echo "1. Parameter fehlt!"
29
:fehler2
30
echo "2. Parameter fehlt!"
31
:ende
32
del Dateiliste.txt
33
echo fertig.
34
REM ---EOF

Ich danke für eurere Vorschläge die mir bei der Lösung halfen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Schön das du es hinbekommen hast. Ich will mich keineswegs mit dir 
streiten oder dich überzeugen, ich kann dir nur sagen das es technisch 
keinen Unterschied macht in welcher Reihenfolge du kopierst (bezogen auf 
die Defragmentierung) und eine (für Menschen geordnete) Dateilisten dem 
Computer ziemlich egal ist ;)

Das einzige wo es (marginal) etwas bringen würde wäre, wenn dein 
Verhalten so wäre das du alle Dateien kopierst, und dann (alphabetisch 
von hinten) eine bestimmte Anzahl löscht.

Defragmentieren bringt eh nur auf Festplatten etwas, bei USB-Sticks oder 
CF/SD Karten ist es eher schädlich und hat keinen Nutzen.

> und wie WinXP defragmentiert kann man ja zuschauen.
> Das mit den vielen buntern senkrechten Strichen
Ja das gabs auch schon unter MS-Dos es beruhigt auf jedenfall ungemein 
:P

Trotzdem verfolgt XP (je nach Einstellung) sowieso eine andere 
Strategie:
Häufig benutzte Dateien werden in Bereiche ausgelagert die schneller 
zugreifbar sind, und das ist in Grenzen auch sinnvoll.

Das Defragmentieren nach Alphabet hat aber nun überhauptkeine Vorteile 
und dauert nur unötig lange (wei du schon festgestellt hast). Aber nunja 
wenns glücklich macht wieso nicht ;)

von Zwie B. (zwieblum)


Lesenswert?

> Häufig benutzte Dateien werden in Bereiche ausgelagert die schneller
> zugreifbar sind, und das ist in Grenzen auch sinnvoll.

Aehm, welche Bereiche der Festplatte sind schneller zugreifbar als 
andere?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Zwie Blum schrieb:
> Aehm, welche Bereiche der Festplatte sind schneller zugreifbar als
> andere?
Wenn die Daten "Übereinander" an gleicher Postion auf den Plattentellern 
liegen z.B. (wohl eher vernachlässigbar und selten).
Aber eine HD arbeitet mit konstanter Umdrehungsgeschwindigkeit folglich 
ist es nicht egal ob die Daten innen oder außen auf den "Tellern" 
liegen, das kann man sogar testen:
http://www.chip.de/artikel/PC-Diagnose-und-Tuning-6_12863836.html
Deshalb haben alle HDs auch eine mittlere Zugriffsgeschwindigkeit, bei 
einer Audio CD hingegen regelt der Player (zumindest früher) die 
Drehzahl je nach Postion nach sodass eine konstante Bitrate erreicht 
wird. Bei Schallplatten wird das einfach dadurch ausgeglichen das halt 
die "Länge" der "Bits" unterschiedlich ist innen und außen.

Ansonsten haben alle FP sowieso einen Wegoptimierungsalgorithmus drinne 
sodass es halt bei nicht ausschließlich sequentiellem Zugriff eh 
Glückssache ist ob dies (spürbare) Auswirkungen hat.

von Ronald (Gast)


Lesenswert?

Ach nun wird ja doch über Defragmentierung diskutiert, obwohl es nicht 
zum eigentlichen Thema paßt und ich mit der Erwähnung keine Diskusion 
darüber anstoßen wollte.
 Und das mit der alphabetischen Sortierung von MyDefrag kann und wird in 
Bereiche Unterteilt: NTFS-Files, Bootfiles usw. und innerhalb dieser 
kann sortiert abgelegt werden. Einfach nur defragment(fast) 
defragmentiert wie alle anderen Defrag-Progs und WindowsXP nur die 
Dateien die gerade in noch freie größere  Stellen reinpassen. Und 
tausende kleine Löcher bleiben. SortByName() oder MoveDownFill() faßt 
aber allen freien Speicher am Ende der Platten zusammen. So werden neue 
Dateien wieder unfragmentiert geschrieben.

 Doch das wollte ich hier eigentlich gar nicht diskutieren, sondern 
Batch-Programmierung...

Stimmt, mein Script arbeitet recht wunschgemäß, solange man nur EINE 
Verzeichnisebene verschieben will. Aber leider werden keine 
Ordnerstrukturen verschoben, sondern alles wandert aus Unterordnern 
"flach" in den Zielordner. Also muß bei der Zeile mit dem DIR-Befehl das 
/S wieder raus!

Gibt es eine Alternative zum MOVE-Befehl, die Ordner verschieben kann???
Sowas wie "MoveTree"? Oder CopyTree (dann gefolgt von DEL Quelle 
benutzt)?
Oder kann man die Zeilenbearbeitung im Batch so ändern, daß an %2 die 
originalen Ordnernamen angehängt werden?

move D:\Bilder\dcim\*.jpg E:

verschiebt nämlich alle Bilder in den Hauptordner von E: und verliert 
nicht nur den DCIM!?

von spess53 (Gast)


Lesenswert?

Hi

Hast du dich schon mal mit der Dateiverwaltung auf Speichermedien, 
sprich Directory, FAT , beschäftigt?

MfG Spess

von Rolf Magnus (Gast)


Lesenswert?

Läubi .. schrieb:
> Zwie Blum schrieb:
>> Aehm, welche Bereiche der Festplatte sind schneller zugreifbar als
>> andere?
> Wenn die Daten "Übereinander" an gleicher Postion auf den Plattentellern
> liegen z.B. (wohl eher vernachlässigbar und selten).
> Aber eine HD arbeitet mit konstanter Umdrehungsgeschwindigkeit folglich
> ist es nicht egal ob die Daten innen oder außen auf den "Tellern"
> liegen, das kann man sogar testen:

Das ist aber mehr für die Lesegeschwindigkeit relevant. Bei der 
Zugriffszeit wird man die Daten eher nahe an der Mitte der Platte 
speichern, weil dort die Idle-Stellung des Schreib-/Lesekopfs ist und 
dessen Bewegung oft bei weitem den zeitaufwendigsten Teil des Zugriffs 
darstellt.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Das ist aber mehr für die Lesegeschwindigkeit relevant.
> Bei der Zugriffszeit wird man die Daten eher nahe an der Mitte ...
Tja wonach soll man optimieren? ;) Das ist eben das Problem es gibt kein 
immer perfektes System.

> Gibt es eine Alternative zum MOVE-Befehl, die Ordner verschieben kann
Früher gab es XCopy und Deltree... statt delltree hat in XP aber einfach 
del jetzt einen passenden Parameter.
Du kannst auch (ich glaub mit call) ein weiteres Batchfile aufrufen, um 
somit eine Art Rekursion deines Skriptes ermöglichen.

Für ausgefallenere möglichkeiten würde sich aber wirklich dann fast ein 
Programm eignen, z.B. in Java ist sowas schnell geschrieben.

von Gerry E. (micky01)


Lesenswert?

Ich habe ja erst an der Sinnhaftigkeit des sortierten Kopierens 
gezweifelt. Aber wenn man dann einen DVD-Player vor sich hat, der die 
Files in genau der Reihenfolge abspielen will, wie sie im Directory 
vorkommen, das gibt der Sache dann doch eine Berechtigung.

von Ronald (Gast)


Lesenswert?

Also xcopy finde ich auch bei XP, sogar auf einer UBCD4WIN.
Ich werde mich mal damit befassen. Es hat Parameter für Ordner.

Bleibt mir noch ein anderes Problem: (das mit Bilder\dcim\ sei nur ein 
Beispiel)
Angemommen ich befinde mich im Ordner D:\Bilder\DCIM , wenn ich die 
Batchdatei ausführen möchte. Darin befinden sich noch weitere 
Unterordner wie z.B. 100Casio, 100Agfa, 100DICAM usw. Der DIR-Befehl 
schreibt nun eine Liste entweder ganz ohne Pfad, oder mit dem vollen 
Pfad samt LW:
D:\Bilder\DCIM\100CASIO\cimg0289.jpg
D:\Bilder\DCIM\100CASIO\cimg0287.jpg
D:\Bilder\DCIM\100CASIO\cimg0282.jpg
D:\Bilder\DCIM\100CASIO\cimg0284.jpg

Ich hätte nun aber gern die Liste relativ vom aktuellen Ordner aus
100CASIO\cimg0281.jpg
100CASIO\cimg0282.jpg
100CASIO\cimg0283.jpg
100CASIO\cimg0284.jpg
und im Zielordner soll wieder der Ordner 100CASIO verwendung finden.
Geht es eine Ausgabe so in eine Liste zu schreiben? Oder den Pfad zum 
aktuellen Ordner "abzuschneiden"?
DIR . /O:G /B gibt zwar eine Liste nur der Ordner aus, aber ob dann der 
Ordner aus so einer Liste ganz verschoben werden kann? oder gar nix 
passiert??

move D:\Bilder\dcim\100*\*.jpg E:\NeueBilder\DCIM\
holt ja die Bilder aus den Unterordnern \100*\ eine ebene hoch.

Angemommen ich befinde mich im Ordner D:\Bilder\DCIM ,
xcopy 100CASIO E:\NeueBilder\DCIM\test /S /E
verliert den/die Ordner 100CASIO

xcopy 100CASIO E:\NeueBilder\DCIM\test /T /E
legt im Ordner test nur eine leere Kopie des Ordners 100CASIO\moved an 
ohne Dateien zu kopieren.

xcopy ..\DCIM\100casio test\ /S /E
verliert auch wieder den Ordner 100CASIO, kopiert aber den alten 
Versuchsordner moved und moved\moved.txt mit.

Irgendwie ist das unbefriedigend. Wenn ich beim Amiga einen Ordnernamen 
zum Kopieren angebe, dann wird auch der Ordner kopiert und nicht nur 
sein Inhalt.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ronald schrieb:
> Irgendwie ist das unbefriedigend. Wenn ich beim Amiga einen Ordnernamen
> zum Kopieren angebe, dann wird auch der Ordner kopiert und nicht nur
> sein Inhalt.

Sorry aber wenn dein Amiga sooooo toll ist warum benutzt du den nicht 
einfach ;P

> xcopy 100CASIO E:\NeueBilder\DCIM\test /S /E
> verliert den/die Ordner 100CASIO
Du mußt schon schreiben:
>> xcopy 100CASIO E:\NeueBilder\DCIM\test\100CASIO /S /E

ggf mit /L "simulieren" /E brauchst du nur wenn du auch leere Ordner 
haben willst. Ansosnten schonmal /T /E /S probiert?

von Dieter B. (debe)


Lesenswert?

Vielleicht hilft Windows PowerShell weiter.
Da gibt es eine Menge Parameter zu XCOPY.

debe

von Ronald (Gast)


Lesenswert?

Läubi .. schrieb:
> Sorry aber wenn dein Amiga sooooo toll ist warum benutzt du den nicht
> einfach ;P

Weil beim echten die Festplatte kaputt ging und modern programierte 
Internetseiten (besonders Onlinebanking) mit den Amigabrowsern nicht 
mehr möglich ist. Lange benutzte ich beide (Amiga und PC) parallel. d.h. 
hauptsächlich den Amiga für normales Arbeiten und surfen, und nur für 
die wenigen Dinge, die der nicht mehr konnte den PC. Anfangs 
hauptsächlich nur Onlinebanking. Inzwischen habe ich ja schon länger den 
WinUAE mit dem "modernsten" AmigaOS 3.5 eingerichtet, aber noch nicht 
alle Programme so wie früher am echten Amiga installiert. Vieles ist ja 
mit der kaputten Festplatte (eine stinknormale IDE-Platte) verloren 
gegangen, bevor ich den gerade angeschafften Brenner zum Backups machen 
nutzen konnte.

Ich nutze also den winUAE gelegentlich für liebgewonnene Programme, für 
die ich unter DOS&WIN keinen passenden Ersatz gefunden habe.

Aber nur um ein paar Dateien zu kopieren den Emulator anschmeißen ... 
ist dann doch zu aufwendig. Noch dazu wo sich die Art und Weisen Dateien 
auf Datenträgern zu Schreiben stark unterscheiden. Für sein OS und 
Amigadateien hat der Emulator sein Hardfile. Da kann die PC-Seite keine 
Dateien "versauen". Mit WinUAE kann ich surfen, brennen, drucken, aber 
leider nicht stabil SOUND und Multimedia (PC-Formate) verwenden. Ist 
aber die Schwäche von WinUAE0.8 nicht AmigaOS.

So aber jetzt bitte KEINE Betriebssystemdiskusion daraus machen! Das 
gehört nicht zum Thema. Ich habe es nur erwähnt, weil ich von da einige 
bequemere Arbeitsweisen gewöhnt bin. Wäre der hesteller des Amiga nicht 
Pleite gegangen und der Amiga weiterentwickelt worden, würde ich heute 
keine PC benutzen. Aber weiter darüber diskutieren will ich hier nicht.

Es geht hier um BATCH-Programierung unter DOS. (egal wie gut oder 
schlecht das ist)

von Zwie B. (zwieblum)


Lesenswert?

Hab' grad ein passendes Buch in der Bibliothek gefunden: advanced MS-DOS 
batch file programming, anno '89 :-)

von Ronald (Gast)


Lesenswert?

> Zwie Blim schrieb:
>> Hab' grad ein passendes Buch in der Bibliothek gefunden: advanced MS-DOS
batch file programming, anno '89 :-)

da muß ich mal danach suchen. vielleicht hilft es mir...
denn solche Hinweise sind hilfreicher, als jeder Betriebssystemstreit!
Denn ich habe nichts davon mit euch zu streiten ob AmigaOs besser als 
MSDOS sei, sondern ich will wissen, wie das gleiche unter MSDOS zu 
erreichen ist!!! (denn jedes AmigaOS ist schlankler und effizienter als 
jedes windows!!!)(Aber darüber will ich hier einfach nicht streiten! )
Ich frage nicht, wie das Problem unter AmigaOS zu lösen sei, sondern wie 
das Problem unter MicroSchrott-DOS (tscxhuldigung MS-DOS) zu lösen ist!
Ich will keine Diskusion um das "bessere OS"!
Ich will keine Diskusion, wie das auf anderen Systemen funktionieren 
könnte!
Ich will einzig und allein wissen, wie ich mein Ziel mit MSDOS+BATCH 
erreichen kann!!!
Alle anderen Diskusionen sind Sinnfrei und Kontraproduktiv!
Entschuldigt bitte, wenn ich hier energisch werde. aber die 
Fragestellung ist nicht: unter welchem System ist das besser zu lösen; 
sondern
 WIE LÖSE ICH DAS UNTER MSDOS!

Ich habe einen Pfad der sei D:\Bilder\DCIM als aktuellen Pfad. (ist aber 
variabel je nach Situation.)
Ich will die darin enthaltenen Ordner MIT INHALT WOANDERSHIN 
verschieben, aber die Subordnerstruktur erhalten!
Ich will aus einem aktuellen Ordner, der D:\Bilder\ heißen KÖNNTE den 
Subnordner \100CASIO\ oder mit anderem -Namen komplett mit Inhalt 
verschieben. Der Zielordner soll dann wieder einen Ordner zum Bleistift 
\100CASIO\ enthalten und die Dateien und Subordner darin.
Ich suche also sowas an Stringoperanten wie :
Vollpfad-AktuellerPfad=Subpfad
MakeDir Ziel:SubPfad(e)
move Subpfad(e)\*dateien*.ext to Ziel:subpfad(e)\

von Ronald (Gast)


Lesenswert?

Läubi schrieb:
> Du mußt schon schreiben:
>> xcopy 100CASIO E:\NeueBilder\DCIM\test\100CASIO /S /E
>
Da es nicht anders geht, sollte die Zeile schon so aussehen.
Aber die Zeile soll ja in der BATCH erzeugt werden. Und nich per hand 
geschrieben. Daher muß 100CASIO (oder irgend ein anderer Subpfad, je 
nach Situation) als Variable an den Zielpfad per Stringbearbeitung 
angefügt werden. Der Zielpfad ist ja im Parameter %2. Also muß ich 
irgendwie eine Variable %%Subdir erzeugen, damit die FOR-Schleife dann 
schreibt:
>>> xcopy %1 %2%%Subdir /S /E
Die Subdirs von 100CASIO wurden ja auch kopiert, nur eben nicht der 
aufgerufene Ordner selber.
Mit welcher Variablen läßt sich in Batch der aktuelle Pfad abfragen?
ich habe jetzt schon ettliche BATCH-Tutorials gefunden und gelesen. Aber 
alle behandeln Das Thema STRING-Bearbeitung nur oberflächlich oder gar 
nicht. Eines nur mathematisch, wie mann zu große Zahlen vergleichen 
könnte...

> ggf mit /L "simulieren" /E brauchst du nur wenn du auch leere Ordner
> haben willst. Ansosnten schonmal /T /E /S probiert?

ja funktionierte nicht. Syntaxfehler. Es geht nur /T /E oder /S /E.

Gerry E. schrieb:
> Ich habe ja erst an der Sinnhaftigkeit des sortierten Kopierens
> gezweifelt. Aber wenn man dann einen DVD-Player vor sich hat, der die
> Files in genau der Reihenfolge abspielen will, wie sie im Directory
> vorkommen, das gibt der Sache dann doch eine Berechtigung.
Prima, wenigstens einer hat verstanden worum es geht. ;)

Dieter B. schrieb:
> Vielleicht hilft Windows PowerShell weiter.
Gute Idee. Wo bekommt man die? Ist die im Web downloadbar?
OK. Habs gefunden und runtergeladen. Installiert sich gerade...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.