ticowrite
Goto Top

Batch Programm Copy soll unbekannten quellort kopieren

Hallo zusammen ich habe folgendes system:

Win7

Zu meinem Problem:

Ich möchte gerne eine Datei von einem Unbekannten quellort zu einem bekannten Zielort kopieren.
Das Problem ist ich weis nicht wo die Quelldatei extraiert wird kann ich den Copy befehl nicht anwenden bzw kenne ich vielleicht nicht die lautende Syntax !? Es soll also keine rolle spielen in welchem Pfad die besagte Datei kliegt. Würde es nicht reichen wenn man den Name der Datei kennt ?

So sollte es in der batch aussehen:

@echo on
copy "XY:\Readme.txt" f:\desktop\ /D /E /Y /I
pause
exit

ENDE

Kann mir da jemand helfen ? Ich scroll schon seit stunden links von google ab und komme zur keiner lösung!

Das muss doch zu machen sein !?
PS: Die batch wird oder soll im gleichen Quellort :YX\ ausgeführt

LG TicoWrite

Content-Key: 261429

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

Printed on: April 26, 2024 at 16:04 o'clock

Member: Pjordorf
Pjordorf Jan 28, 2015 at 17:21:03 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
Ich möchte gerne eine Datei von einem Unbekannten quellort zu einem bekannten Zielort kopieren.
Nada.

Würde es nicht reichen wenn man den Name der Datei kennt ?
Nada 2

copy "XY:\Readme.txt" f:\desktop\ /D /E /Y /I
Hier hast du aber die Quelle angegeben, auch wenn die Syntax nicht zwingend korrekt ist face-smile

Das muss doch zu machen sein !?
Ja

PS: Die batch wird oder soll im gleichen Quellort :YX\ ausgeführt
Na, da kennst du ja dann die Quelle. So unbekannt ist die also nicht.

Zuerst nimmst du deine (vermutete) Quelle X und durchsuchst dort die Ordnerstruktur nach deiner Quelldatei. Wenn nicht in X dann vielleicht in Y usw. bis du deine Quelldatei hast oder eben nicht. Wenn nicht gefunden, ende deiner Batch. Falls gefunden den Ort die merken und dann dein Copy damit anstoßen. Soll es die Quelldatei mehrmals geben dann ...

Bestimmte Ordner rekursiv per Batch löschen und anstelle DEL dein Copy....
Batch soll dateitypen rekursiv suchen, umlagern und in einer Textdatei alten Pfad speichern
Ordnerstruktur rekursiv auflisten

Gruß,
Peter
Member: TicoWrite
TicoWrite Jan 28, 2015 at 17:34:31 (UTC)
Goto Top
1.Die batch wird oder soll im gleichen Quellort :YX\ ausgeführt
Na, da kennst du ja dann die Quelle. So unbekannt ist die also nicht.

ja ebend nicht ! ich weiß ja nicht wo der Anwender die daten extraiert ! bzw die Batch !!!

2.Zuerst nimmst du deine (vermutete) Quelle X und durchsuchst dort die Ordnerstruktur nach deiner Quelldatei. Wenn nicht in X dann vielleicht in Y usw. bis du deine Quelldatei hast oder eben nicht. Wenn nicht gefunden, ende deiner Batch. Falls gefunden den Ort die merken und dann dein Copy damit anstoßen. Soll es die Quelldatei mehrmals geben dann ...

eh soviel zeit und speicherkapazität habe ich nicht um alle möglichkeiten durch zu prüfen ! wann soll denn die batch fertig werden 2050 ?
z.b eine prüf möglich keit:

is die batch in c:\
oder in c:\a
oder in c:\b
oder doch c:\f
oder g:\a\

wann soll ich da fertig werden !? oder hast du evtuell eine andere Lösung ?
Member: Pjordorf
Pjordorf Jan 28, 2015 at 17:48:08 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
ja ebend nicht !
?!?

ich weiß ja nicht wo der Anwender die daten extraiert ! bzw die Batch !!!
Aber welche Datenträger in Frage kommen schon und auch wie diese von dir abgefragt werden können (Lokal, LAN, Internet, FTP, SMB, NFS, iSCSI....)?

eh soviel zeit
Die wirst du dir nehmen müssen wenn du nichts weist aber hinterher etwas Wissen willst.

und Speicherkapazität
Dazu braucht es nur etwas RAM .... um deine Batch laufen zu lassen ....

wann soll denn die batch fertig werden 2050 ?
Das hängt von deinen batcher Kenntnissen

is die batch in c:\
oder in c:\a
oder in c:\b
oder doch c:\f
oder g:\a\
Das nennt sich Rekursiv und ich habe dir 3 Links dazu schon oben genannt. Oder sollen wir dir deine Arbeit machen und dir die Batch erdenken und erstellen. Wenn das dein ziel ist, musst du was fertiges kaufen oder dir im Internet deiner Wahl was suchen. da gibt es auch einiges was dies können könnte und gar nicht gekauft werden muss...

wann soll ich da fertig werden !?
Auf einen C64 dauert es etwas länger, zugegeben.

oder hast du evtuell eine andere Lösung ?
Hast du dir die fertigen Lösungen von oben mal angeschaut wo du nur ein paar Kleinigkeiten ändern musst z.B. ein RD durch CP und dessen Parameter ersetzen?

Gruß,
Peter
Member: BirdyB
BirdyB Jan 28, 2015 updated at 17:52:21 (UTC)
Goto Top
Ich versuche mich jetzt mal im Problemverständnis:
Wenn ich @TicoWrite richtig verstehe, dann liegt die Batch-Datei im gleichen Verzeichnis wie die zu kopierende Datei. Und damit ist die Lösung auch ganz einfach...
copy datei d:\wasauchimmer

Fertig...

Wenn die Datei im Arbeitspfad liegt, muss man auch keinen Pfad angeben...
Member: TicoWrite
TicoWrite Jan 28, 2015 at 19:15:31 (UTC)
Goto Top
Verstanden hast du mich! @ BridyB

aber wenn ich nur den datei namen nehme : copy Readme.txt "f:\TEST Archive\"

bekomme ich einen syntax fehler !?
Member: TicoWrite
TicoWrite Jan 28, 2015 at 19:20:01 (UTC)
Goto Top
@ Pjordorf

erstmal danke für die links die hatte ich nicht gesehen dachte es wären eigene signatur links o.ä !

werde erst mal da rein schaun vielleicht geben die links aufschluss.

weil das was ich möchte ist ja nix anderes was andere programme z.b in einer setup.exe machen irgendwo daten erstellen. nur diese kennen / beziehen sich ja schon aufs ziel. !
Member: BirdyB
BirdyB Jan 28, 2015 at 19:28:03 (UTC)
Goto Top
da374b54b61bca07635695d3b2545b1b

Also bei mir funktioniert es...
Member: Endoro
Endoro Jan 28, 2015 at 19:34:08 (UTC)
Goto Top
Hey,
um festzustellen, wo sich eine Batch befindet, kannst du folgenden Code verwenden (Beispiel):
@echo %~dpnx0
Gruß, Endoro
Mitglied: 114757
114757 Jan 28, 2015 updated at 23:26:09 (UTC)
Goto Top
Es soll also keine rolle spielen in welchem Pfad die besagte Datei kliegt. Würde es nicht reichen wenn man den Name der Datei kennt ?
Also irgendeinen Root-Ordner wirst du wohl schon angeben können. Folgendes Script durchsucht den Ordner c:\root mit all seinen Unterordnern auf die Datei readme.txt und kopiert sie in dein Ziel.
@echo off & setlocal enabledelayedexpansion
set /a counter=1
for /f "delims=" %%a in ('dir /b /s /a-d "c:\root\readme.txt"') DO @(  
   if exist "F:\desktop\%%~nxa" (  
      set "fname=%%~na_!counter!%%~xa"  
      set /a counter +=1
   ) else (
      set "fname=%%~nxa"  
   )
   copy "%%a" "F:\desktop\!fname!"  
)
Das ganze kannst du ja von mir aus auch für andere Laufwerke wiederholen ...

Gruß jodel32
Member: TicoWrite
TicoWrite Jan 29, 2015 at 06:27:02 (UTC)
Goto Top
Ich habe jetzt diesen Code benutzt :

@echo on


set "Typen= Readmett.txt

set Pfad1=f:\


set Ziel="f:\Eigene Programme\Test\"


dir /b /c /s %Pfad1% %Typen% >Auswertung.txt


for /f "delims=" %%m in ('dir /c /s /b %Pfad1% %Typen% ') do copy "%%m" %Ziel%

pause
exit

Allerdings kopiert er mir alle datein die in f:\ sind ! ich möchte aber nur die Readmett.txt haben.

muss da was bei "Typen= geändert werden ?


jetzt versuch ich mal jodel´s code

Danke @jodel & Endoro
Member: pieh-ejdsch
Solution pieh-ejdsch Jan 29, 2015, updated at Jan 31, 2015 at 06:58:21 (UTC)
Goto Top
moin TicoWrite,

bitte benutze für Deine Schnipsel die code tags <code> Codeschnipsel .

Wenn Du beim Befehl dir zwei verschiedene Quellen zum durchsuchen angibst werden auch zwei Quellen ausgegeben. Es ist völlig ausreichend die Datei ab den zu dursuchenden Verzeichnis anzugeben.
dir /s /b D:\Pfad\Datei.ext
Gruß Phil
Member: TicoWrite
TicoWrite Jan 30, 2015 at 07:46:37 (UTC)
Goto Top
 @echo on


set "Typen= Readmett.txt   

set Pfad1=f:\ 


set Ziel="f:\Eigene Programme\Test\"  


dir /b /c /s %Pfad1% %Typen% >Auswertung.txt 



for /f "delims=" %%m in ('dir /c /s /b %Pfad1% %Typen% ') do copy "%%m" %Ziel%  

pause
exit

aber das hab ich doch bei set "Type= doch gemacht oder wie muss das ausehen ? Oder muss ich ich die zeile 16 bearbeiten bei %Typen% ???
Member: BirdyB
Solution BirdyB Jan 30, 2015, updated at Jan 31, 2015 at 06:58:03 (UTC)
Goto Top
Also irgendwie habe ich das Gefühl, die Hilfestellung läuft hier aus dem Ruder...
Die Fragestellung von @TicoWrite bezieht sich eigentlich darauf, dass er eine Datei aus dem Arbeitsverzeichnis der Batch kopieren möchte... Die Codes hier durchsuchen allerdings ganze Pfade nach Dateinamen...

Just my 5 Cents...
Member: Pjordorf
Pjordorf Jan 30, 2015 updated at 10:46:33 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
wie muss das ausehen ?
Nimm mal folgenden Code, Das echo 0ff kannst du ja in echo on jederzeit ändern falls du mehr sehen möchtest.
@echo off

set "Typen=Readmett.txt"  
set "Pfad1=F:\"  
set "Ziel="F:\Eigene Programme\Test""  

echo.
echo Die datei wird gesucht und im aktuellen Ordner in Auswertung.txt gespeichert
echo ...
echo.

dir /b /c /s %Pfad1%%Typen% >Auswertung.txt 

echo.
echo Datei Auswertung.txt gespeichert
echo.

echo.
echo Kopieren der Datei. Bitte warten ...
echo.

for /f "delims=" %%m in ('dir /b /c /s %Pfad1%%Typen%') do copy %%m %Ziel%  

echo.
echo Kopieren abgeschlossen
echo.
echo Inhalt vom Zielverzeichniss
echo.

dir %ziel%

echo.

pause
Vergleich dein und diesen Code und finde heraus warum deiner es nicht tut.... Ich nehme an das du das Ergebnis so haben wolltest. Hinweis: auch nicht sichtbare Zeichen wie Leerzeichen sind gültige Zeichen und bezwecken etwas, auch in Batch...

Gruß,
Peter
Member: Endoro
Endoro Jan 30, 2015 at 16:26:50 (UTC)
Goto Top
Zitat von @BirdyB:

Die Codes hier durchsuchen allerdings ganze Pfade nach Dateinamen...

Nö, meiner nicht. Was hier zu besichtigen ist, ist ein verbreitetes Foren-Phänomen. face-smile
Gruß, Endoro
Member: TicoWrite
TicoWrite Jan 31, 2015 updated at 06:56:24 (UTC)
Goto Top
Ich habe das mal ausprobiert:

  @echo on

set "Typen=Readmett.txt   

set "Pfad1=F:\"  

set "Ziel="F:\Eigene Programme\Test"   

echo. 

echo Die datei wird gesucht und im aktuellen Ordner in Auswertung.txt gespeichert 

echo ... 

echo.



dir /b /c /s %Pfad1% %Typen% >Auswertung.txt  

echo. 


echo Datei Auswertung.txt gespeichert 

echo. 

echo.

echo Kopieren der Datei. Bitte warten ... 


echo. 


for /f "delims=" %%m in ('dir /b /c /s %Pfad1% %Typen% ') do copy %%m %Ziel%   

echo. 

echo Kopieren abgeschlossen 

echo. 

echo Inhalt vom Zielverzeichniss 


Er kopiert nicht !
die bat schreibt mir nur die Auswertungs.txt und in dieser ist auch der Pfad zur Readmett.txt enthalten. das is ja schon mal gut.

aber ich glaube da muss ein anderer befehl hin für set Type oder in der for /f zeile !??
Mitglied: 114757
114757 Jan 31, 2015 at 08:31:37 (UTC)
Goto Top
kann ja auch nich ...., nehme mein Script von oben dann wuppt das ....
Deine vielen Echos helfen dir da auch nich ;-P
Member: Endoro
Endoro Jan 31, 2015 at 10:31:09 (UTC)
Goto Top
Hey,
wenn sich die grad laufende Batch und README.TXT im selben aber unbekannten Ordner befinden, kann die Textdatei mit folgendem Code irgendwohin kopiert werden:
copy "%~dp0README.TXT" "X:\Zielpfad\Zielordner"  
Gruß, Endoro
Member: Pjordorf
Pjordorf Jan 31, 2015 at 11:36:57 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
Du hast mal wieder Leerzeichen an stellen eingefügt wo keine hin dürfen oder nötige Zeichen weg gelassen! Kein wunder das es wieder nicht funktioniert!
set "Ziel="F:\Eigene Programme\Test"  
muss aber
set "Ziel="F:\Eigene Programme\Test""  
lauten (du hast ein doppeltes Hochkomma ausgelassen) und deine
dir /b /c /s %Pfad1% %Typen% >Auswertung.txt
muss lauten
dir /b /c /s %Pfad1%%Typen% >Auswertung.txt

Und dein
for /f "delims=" %%m in ('dir /b /c /s %Pfad1% %Typen% ') do copy %%m %Ziel%  
kann auch nicht weil es ein
for /f "delims=" %%m in ('dir /b /c /s %Pfad1%%Typen% ') do copy %%m %Ziel%  
sein sollte (auch hier wieder Leerzeichen der Übeltäter)

die bat schreibt mir nur die Auswertungs.txt und in dieser ist auch der Pfad zur Readmett.txt enthalten
Nur diese eine Zeile wo deine ReadMett.txt liegt oder eine Auflistung aller Dateien? Meine Auswertung.txt ist nur 23 Bytes Groß und hat als Inhalt nur eine Zeile
F:\Cisco\ReadMett.txt

aber ich glaube da muss ein anderer befehl hin für set Type oder in der for /f zeile !??
Nein, du musst nur richtig abschreiben. Hier im Text werden aufeinander folgende Leerzeichen unterdrückt. Du hast es nämlich auch hier geschafft weitere Leerzeichen einzubauen face-smile
für set Type   oder in der for /f   zeile !
Dann gibt es auch keine Endlosschleifen oder Syntax Fehler.

Und so hast du 3 varianten für ein und das gleiche Problem. Eine Minimalst Version, eine schnelle Version und deine ursprüngliche aber zeitkostende Version.

Und du hast an fast jeder Zeile wieder unnötige Leerzeichen am ende eingefügt. Macht das dein verwendeter Editor oder du?

Gruß,
Peter
Member: TicoWrite
TicoWrite Feb 01, 2015 at 11:04:30 (UTC)
Goto Top
A: Ich habe den code ohne diese leerzeichen verwendet und es funktioniert nicht.
B: ich habe es mit den Leerzeichen versucht klappt nicht.
C: @ Pjordorf er listet alle datein auf die sich im verzeichnis f:\ und darunter enthaltenen datein auf ! + setzt er die Readmett.txt am ende der auswertung ein !
D: Es könnte aber auch sein das die batch den befehl (do) copy nicht kennt also nur : copy
F: Wenn alles nix hilft versuch ich Jodels32 code version !

LG TicoWrite
Member: Pjordorf
Pjordorf Feb 01, 2015 at 13:11:54 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
A: Ich habe den code ohne diese leerzeichen verwendet und es funktioniert nicht.
Der Funktioniert, mehrmals wegen dir getestet face-smile

B: ich habe es mit den Leerzeichen versucht klappt nicht.
Das kann nicht gehen weil da an stellen dann Leerzeichen sind wo keine hingehören!

C: @ Pjordorf er listet alle datein auf die sich im verzeichnis f:\
Das ist eines dieser Leerzeichen die das veranstaltet. Bitte den Code genauesten rauskopieren (Rechts oben im Textfeld auf Quellcode gehen und einfach kopieren) und nutzen. Es wird definitiv nur der Treffer der Readmett.txt in die Datei Auswertung.txt reingehauen. Bei war es nur ein Treffer da die Datei ReadMett.txt nur einmal (1) existierte - also korrekt.

Readmett.txt am ende der auswertung ein !
Wenn es bei dir eben die letzte Datei ist, dann ist das ende schon OK, nur nicht das dir alles aufgeschrieben wird. Da dran ist ein Leerzeichen Schuld.

D: Es könnte aber auch sein das die batch den befehl (do) copy nicht kennt
Blödsinn.

Und bitte genau schauen was hier steht (Zeichen für Zeichen)
set "Typen=Readmett.txt"  
set "Pfad1=F:\"  
set "Ziel="F:\Eigene Programme\Test""  
dir /b /c /s %Pfad1%%Typen%>Auswertung.txt
for /f "delims=" %%m in ('dir /b /c /s %Pfad1%%Typen%') do copy %%m %Ziel%  
dir %ziel%
pause

Schau dir genau an wie es in Zeile 3, 4 und 5 aussieht.
Zeile 4 generiert die Auswertung.txt wo nur die gefunden Pfade und Dateinamen von Readmett.txt drinstehen, sonst nichts...
Zeile 5 Kopiert ohne einen Syntaxfehler auszulösen und die Datei ist anschließend in dein %Ziel%, dazu die zusätzlichen doppelten hoch Kommata in Zeile 3.

Zur Info, das ganze ist auf ein Windows 7 64 Prof mit allen Patches... Obwohl das auch mit MS DOS so laufen sollte...

Gruß,
Peter
Member: TicoWrite
TicoWrite Feb 02, 2015 at 09:39:20 (UTC)
Goto Top
@Pjordorf ich habe deinen code benutzt und es funktioniert nicht. irgendwas stimmt da nicht.

ich habe den code jetzt etwas verändert aller dings kopiert er mir nicht nur die Readmett.txt sondern auch alle anderen datein die unt f:\ zu finden sind
face-sad ... ich glaube irgendwas muss in der for /f schleife geändert werden. da das system bei deinem wie auch meinem code das file nicht findet.

ob es an (" ") mit oder ohne und oder ("%%m") liegt ? ich bin echt ratlos und mir wachsen schon graue haare .... denn die batch gibt mir dann die ausgabe das in der schleife nur in f:\ gesucht wird. aber die schleife soll auch alle unterordner mit einbeziehen !? grrr ...

Ich werde euch mal ein screenshot zeigen wie sich die bat verhält beim ausführen und wie der code der bat aussieht . nicht das ihr mich noch für total bescheuert haltet ...

anbei leg ich noch den jetztigen code bei der alle datein kopiert:

@echo on
set "Typen= Readmett.txt"  
set "Pfad1=f:\"  
set "Ziel="f:\Eigene Programme\Test\""  
dir /b /c /s %Pfad1%%Typen%>Auswertung.txt
for /f "delims=" %%m in ('dir /c /s /b %Pfad1%%Typen%') do copy "%%m" %Ziel%  
dir %ziel%
pause
exit

bitte sagt mir wie ich hier einen screenshot einfügen kann sofern das möglich ist ! scheint ja ein recht modernes forum zu sein !
Member: Pjordorf
Pjordorf Feb 02, 2015 updated at 10:07:53 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
es funktioniert nicht. irgendwas stimmt da nicht.
Das ist aber keine mir bekannte Fehlermeldung face-smile

("%%m")
?!?

Ich werde euch mal ein screenshot zeigen
Gut

nicht das ihr mich noch für total bescheuert haltet ...
face-smile

Dein Code ist falsch! Wieder ein Leerzeichen wo keins sein darf! Tausche Zeile 1 gegen Zeile 3
set "Typen= Readmett.txt"  

set "Typen=Readmett.txt"  
bitte sagt mir wie ich hier einen screenshot einfügen
Deine Frage bearbeiten klicken, dort Bilder hinzufügen und den resultierende Link dann hier rein stellen.
Member: Pjordorf
Pjordorf Feb 02, 2015 at 10:25:04 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
funktioniert nicht
Dein Code genommen
E:\Test>copyfile
E:\Test>set "Typen= Readmett.txt"
E:\Test>set "Pfad1=E:\"
E:\Test>set "Ziel="E:\Eigene Programme\Test\""
E:\Test>dir /b /c /s E:\ Readmett.txt 1>Auswertung.txt
Datei nicht gefunden
E:\Test>for /F "delims=" %m in ('dir /c /s /b E:\ Readmett.txt') do copy "%m" "E:\Eigene Programme\Test\"
^CBatchvorgang abbrechen (J/N)? j

Hier ist dein set Typen= Readmett.txt der Übeltäter

Hier die Ausgabe mit mein geänderte Code
E:\Test>set "Typen=Readmett.txt"
E:\Test>set "Pfad1=E:\"
E:\Test>set "Ziel="E:\Eigene Programme\Test\""
E:\Test>dir /b /c /s E:\Readmett.txt 1>Auswertung.txt
E:\Test>for /F "delims=" %m in ('dir /c /s /b E:\Readmett.txt') do copy "%m" "E:\Eigene Programme\Test\"
E:\Test>copy "E:\Cisco\ReadMett.txt" "E:\Eigene Programme\Test\"
        1 Datei(en) kopiert.
E:\Test>dir "E:\Eigene Programme\Test\"
 Datenträger in Laufwerk E: ist Data
 Volumeseriennummer: EE85-A833
 Verzeichnis von E:\Eigene Programme\Test
02.02.2015  11:19    <DIR>          .
02.02.2015  11:19    <DIR>          ..
02.02.2015  11:03                25 ReadMett.txt
               1 Datei(en),             25 Bytes
               2 Verzeichnis(se), 362.487.427.072 Bytes frei
E:\Test>pause
Drücken Sie eine beliebige Taste . . .
ich hab nur Laufwerk F gegen E getauscht, mangels F: face-smile

Und nein, das habe ich nicht im Editor nachgebastelt face-smile
9a2e46f058ef76ed774c3b2989c2dc86

Gruß,
Peter
Member: TicoWrite
TicoWrite Feb 02, 2015 at 14:59:23 (UTC)
Goto Top
schreib mal bitte nur den bat code ! vom fenster aus siehts ja ganz anders aus !
Member: TicoWrite
TicoWrite Feb 02, 2015 at 15:13:58 (UTC)
Goto Top
schon gut hat sich erledigt hab den fehler gefunden dank pjordorf ... aber es war ein andere fehler ! schau hier :

@echo on
set "Typen= Readmett.txt"  
set "Pfad1=f:\"  
set "Ziel="f:\Eigene Programme\Test\""  
dir /b /c /s %Pfad1%%Typen%>Auswertung.txt
for /f "delims=" %%m in ('dir /c /s /b %Pfad1%%Typen%') do copy %Typen% %Ziel%  
dir %ziel%
pause
exit
der fehler war in zeile 8 und war do copy (%Typen%) hätte da hin gemust !

Naja jeder macht mal fehler aber dennoch ein super danke schön für euch alle und danke pjordorf dein letzter beitrag hat meinen denk fehler aufgezeigt.

lieben gruß TicoWrite

jetzt kanns endlich weiter gehen watt ne geburt ... face-smile
Member: Pjordorf
Pjordorf Feb 02, 2015 at 15:15:35 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
schreib mal bitte nur den bat code ! vom fenster aus siehts ja ganz anders aus !
set "Typen=Readmett.txt"  
set "Pfad1=F:\"  
set "Ziel="F:\Eigene Programme\Test""  
dir /b /c /s %Pfad1%%Typen%>Auswertung.txt
for /f "delims=" %%m in ('dir /b /c /s %Pfad1%%Typen%') do copy %%m %Ziel%  
dir %ziel%
pause
Nur dein F: anstelle mein E: getauscht.

Gruß,
Peter
Member: TicoWrite
TicoWrite Feb 02, 2015 at 15:22:43 (UTC)
Goto Top
also bei mir klappt nur der von mir letzte gepostete code!

wenn ich bei dir es so schreibe wie in zeile 1 und 5 dann klappt es nicht !

aber jetzt läufts danke euch

@114757 sorry das ich nicht dein code mal ausprobiert habe aber dein code läuft bestimmt auch ;)
Member: Pjordorf
Solution Pjordorf Feb 02, 2015, updated at Feb 03, 2015 at 11:29:01 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
hab den fehler gefunden
Nein, nicht wirklich. Der Fehler ist in Zeile 2, das Leerzeichen nach dem Typen= oder vor dem Readmett.txt. Dann klappt auch Zeile 5 und 6 sogar ohne Änderung. (Zeile 8 ist ja nur eine pause).

Und wenn du dein jetzige Code nimmst, reicht ein
@echo on
set "Typen= Readmett.txt"  
set "Ziel="f:\Eigene Programme\Test\""  
copy %Typen% %Ziel%
dir %ziel%
pause
Exit

Diers setzt voraus das deine Readmett.txt im Verzeichnis vom Code liegt UND deine Readmett.txt ein Leerzeichen im Dateiname vor dem "R" hat.

Wer hat Dateinamen mit führende Leerzeichen?

set "Typen= Readmett.txt"  
Ist dein Fehler face-smile

Gruß,
Peter
Mitglied: 114757
114757 Feb 02, 2015 updated at 15:56:10 (UTC)
Goto Top
Zitat von @TicoWrite:
der fehler war in zeile 8 und war do copy (%Typen%) hätte da hin gemust !
So ein Bullshit ... Quatsch, dann bräuchtest du die FOR Schleife ja überhaupt nicht, denn in %%m ist ja immer der komplette Pfad zur Datei.
by the way der Parameter /c im dir Befehl ist überflüssig
for /f "delims=" %%m in ('dir /s /b %Pfad1%%Typen%') do copy "%%m" %Ziel%  

Ess erst mal dein Mettbrötchen auf ....

Wir sind hie ja schon a bisserl länger mit Batch unterwegs als du.

Und außerdem wird dein Script beim zweiten Durchlauf deine Datei in deinem Zielverzeichnis finden, weil du als Quelle und Ziel das selbe Laufwerk verwendest bzw. dein Ziel ein Unterordner des Quellsuchordners ist !!!
Member: Pjordorf
Solution Pjordorf Feb 02, 2015, updated at Feb 03, 2015 at 11:28:43 (UTC)
Goto Top
Hallo,

Zitat von @TicoWrite:
also bei mir klappt nur der von mir letzte gepostete code!
Nicht wirklich

dann klappt es nicht !
Du könntest aber mal die Güte haben und den (die) Fehler mal nennen und wo diese auftauchen!

aber jetzt läufts danke euch
Nein, tut es nicht

Sollte deine Datei Readmett.txt allerdings ein Leerzeichen an erster Stelle des Datenamens haben, oder sonst ein Zeichen dort welches aber von Windows als leeres Zeichen dargestellt wird .... Warum ich darauf komme? Weil du anscheinend das so hast denn sonst würdest du nicht immer wieder ein Leerzeichen in dein
"set Typen= Readmett.txt"  
einbauen.

Ich habe mir mal solch eine (unnormale) Datei erzeugt im Windows wobei ich nicht weiß wie du die erstellt hast. Windows lässt es nämlich nicht zu einfach ein Leerzeichen als erstes Zeichen zu nutzen, egal ob beim erstellen, umbenennen oder kopieren. Ich habe dazu linke ALT Taste + Nummernblock 255 verwendet, was ein weiches Leerzeichen erstellt - das normale Leerzeichen wäre ein ALT + Nummernblock 032. Der verwendete und darstellende Zeichensatz ist nicht unwichtig hierbei.

Im Windows Explorer
6f5017556b4d4a0ce4764f7175c1a12c
Beachte die normale Schreibweise, die unnatürliche (führendes weiches Leerzeichen) und dessen Kopie (welches wieder in normal durch das OS erstellt wird)

Im CMD Fenster
04.10.2014  22:54    <DIR>          Default
05.10.2014  18:40    <DIR>          UK Test L2
02.02.2015  16:37                24 Read1mett - Kopie.txt
02.02.2015  17:12                24 Read1mett.txt
02.02.2015  16:37                24  Readmett.txt

Und was dann in der Auswertung.txt erzeugt wird
E:\Cisco\ÿReadmett.txt
Mit folgenden Code ist aber auch das zu lösen
@echo on
set "Typen=*Readmett.txt"  
set "Pfad1=E:\"  
set "Ziel="E:\Eigene Programme\Test""  
dir /b /c /s %Pfad1%%Typen%>Auswertung.txt
for /f "delims=" %%m in ('dir /b /c /s %Pfad1%%Typen%') do copy "%%m" %Ziel%  
dir %ziel%
pause
Dabei bleibt das weiche Leerzeichen am Anfang des Dateinamens  Readmett.txt sogar erhalten. Tausche mein E: gegen dein F:.

Ergebnis Im CMD Fenster, da wird auch kein Syntaxfehler oder Date nicht gefunden angegeben.
E:\Test>set "Typen=*Readmett.txt"
E:\Test>set "Pfad1=E:\"
E:\Test>set "Ziel="E:\Eigene Programme\Test""
E:\Test>dir /b /c /s E:\*Readmett.txt 1>Auswertung.txt
E:\Test>for /F "delims=" %m in ('dir /b /c /s E:\*Readmett.txt') do copy "%m" "E:\Eigene Programme\Test"
E:\Test>copy "E:\Cisco\ Readmett.txt" "E:\Eigene Programme\Test"
        1 Datei(en) kopiert.
E:\Test>dir "E:\Eigene Programme\Test"
 Datenträger in Laufwerk E: ist Data
 Volumeseriennummer: EE85-A833
 Verzeichnis von E:\Eigene Programme\Test
02.02.2015  17:40    <DIR>          .
02.02.2015  17:40    <DIR>          ..
02.02.2015  16:37                24  Readmett.txt
               1 Datei(en),             24 Bytes
               2 Verzeichnis(se), 362.130.333.696 Bytes frei
E:\Test>pause
Drücken Sie eine beliebige Taste . . .
Die Auswertung.txt hat nur einen Eintrag, nämlich den Pfad mit Dateinamen. Achtung: hier ist es nicht ein Leerzeichen was dort als erste Stelle des Dateinamens dargestellt wird (Zeichensätz....)
E:\Cisco\ÿReadmett.txt
. Sonst befindet sich da kein Eintrag weiter, da die  Readmett.txt nur 1 mal in LW E: existiert. Es wird daher auch nur 1 Datei kopiert, eine 2te würde sowieso überschreiben, aber in der Auswertung.txt aufgeführt sein.

Gruß,
Peter
Member: Pjordorf
Pjordorf Feb 02, 2015 updated at 17:28:25 (UTC)
Goto Top
Hi,

Zitat von @114757:
by the way der Parameter /c im dir Befehl ist überflüssig
Der /b ebenfalls, aber gehen wir mal davon aus das der TO dieses "dir gedöhns" von seiner vorhergehende Zeile genommen hat face-smile

Und außerdem wird dein Script beim zweiten Durchlauf
Meins auch face-smile Aber er wird zwar finden, in der Auswertung.txt auch eintragen, aber nicht kopieren und überschreiben da quelle und Ziel identisch ist. Da kommt dann eben ein
E:\Test>copy "E:\Eigene Programme\Test\ Readmett.txt" "E:\Eigene Programme\Test"
Die Datei kann nicht in sich selbst kopiert werden.
        0 Datei(en) kopiert.
Unschön eben .... face-smile

Wofür der TO die Auswertung.txt benötigt, hierfür jedenfalls nicht...

Gruß,
Peter
Member: Endoro
Endoro Feb 02, 2015 updated at 18:44:24 (UTC)
Goto Top
Hey,
im Gegensatz zu nachhängenden sind führende Leerzeichen in Windows erlaubt und lassen sich mit Boardmitteln leicht erzeugen. Man sollte aber unbedingt darauf verzichten, wenn schon ich das sogar bei kommerziellen Programmen gefunden habe face-smile

8a27391a537501a87d66ae98151b38cd


Gruß, Endoro
Member: TicoWrite
TicoWrite Feb 03, 2015 at 06:06:46 (UTC)
Goto Top
LOL jetzt muss ich schmunzeln ... also der code den ich als letztes verfasst habe läuft . Er kopiert und trägt die Datei in die log ein ! face-smile

vielleicht liegts ja an der Win 7 Home Edition das es geht bei meiner zeile 2 , wenn ich es so zusammen schreibe wie bei Pjordorf dann geht die bat direkt wieder zu. oder in zeile 8 statt (%Typen%) %%m oder "%%m" zu verwenden bekomme ich die fehler ausgabe das die datei nicht aufzufinden sei.

Ich denke das sich der befehl in zeile 8 ( do copy %typen%) auf die zeile 2 set Typen= bezieht und so war es auch !

Naja jedenfalls funktioniert jetzt der code

Und leute wenn ihr schon so lange hier seit ... schmunzel ... dann wäre es jetzt auch nicht schlimm es zu akzeptieren das es funktioniert.

Wie gesagt ich kann euch gerne ein Screenshot oder Video machen face-smile))
Member: Endoro
Endoro Feb 03, 2015 updated at 06:54:41 (UTC)
Goto Top
Hey, ich hab zwischenzeitlich aus den Augen verloren, worum es ging. Wenn du das bitte kurz zusammenfassen kannst, ist dir mein Applaus gewiss.

Zu meinem Problem:

Ich möchte gerne eine Datei von einem Unbekannten quellort zu einem bekannten Zielort kopieren.

@echo on
copy "XY:\Readme.txt" f:\desktop\ /D /E /Y /I
pause
exit

PS: Die batch wird oder soll im gleichen Quellort :YX\ ausgeführt


Das jedenfalls war nicht dein Problem. Aber schön, dass du ein anderes lösen konntest face-confused

Gruss, Endoro.