Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

XCOPY und DEL im programm einbinden

Mitglied: cinda

cinda (Level 1) - Jetzt verbinden

24.02.2006, aktualisiert 28.02.2006, 7553 Aufrufe, 16 Kommentare

Hallo zusammen,
ich hoffe, ihr könnt mir bei dieser Frage weiter helfen

ich habe mir bis jetzt meine batch datei im programm so einbinden lassen

private void beispiel()
{
Process p=null;
try{
p= new Process();
p.StartInfo.FileName = @"C:\\temp\\backup1.bat
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
}
...

Meine Frage: Kann ich den befehl direkt vom programm starten, so brauche ich die datei nicht abzurufen. Für xcopy habe mir an sowas gedacht:
private void beispiel()
{
Process p=null;
try{
string Xcopy = "%SourceDir%//*.* %TargetDir% /E /Y /I /D > C:/temp/backup.log"
p= new Process();
p.StartInfo.FileName = xcopy
p.StartInfo.Arguments = Xcopy;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
}
...
Wie sieht das mit DEL aus?
Mitglied: Biber
24.02.2006 um 14:34 Uhr
Moin cinda,

ich denke, XCOPY und DEL musst Du beim Aufruf unterschiedlich behandeln.
Hinter "XCopy" verbirgt sich ja die XCopy.exe... wenn Du Deine Shell/Spawn-Funktion aufrufst, wird diese hoffentlich so intelligent arbeiten, dass sie sinngemäß
- eine "xcopy" im aktuellen Verzeichnis sucht und nicht findet,
- danach eine Xcopy.com, xcopy.exe, xcopy.bat, ... im aktuellen Verzeichnis sucht und nicht findet
- danach eine Xcopy.com, xcopy.exe, xcopy.bat, ... im gesamten definierten %PATH% sucht und dabei die %windir%\system32\XCopy.exe findet und startet:

Bei "DEL" sieht das anders aus... das ist ja ein interner Befehl des CMD-Interpreters, der CMD.exe. Es gibt also nirgendwo eine "DEL.exe", die gefunden werden kann.

Hier sehe ich drei Möglichkeiten:

a) den internen CMD-Befehl "Del" als Parameter übergeben an die CMD.exe
Aufruf "cmd /c del [pfad\][Dateiname] [parameter]"

b) das Löschen mit C-Funktionen machen - ohne CMD.exe und ohne DEL
(wie immer die Funktionen bei Deinem C-Compiler heißen: FileDelete() oder FErase()..etc )

c) die bisherige Strategie beibehalten und einen Batch aufrufen...

Schönes Wochenende
Biber
Bitte warten ..
Mitglied: cinda
24.02.2006 um 15:03 Uhr
Hallo Biber,

wenn ich dich richtig verstehe, dann kann ich mit dieser art nur das problem für xcopy lösen und mein codenabschnitt sieht so einfach aus:

private void Copy()
{
Process p=null;
try{
p= new Process();
p.StartInfo.FileName = xcopy
p.StartInfo.UseShellExecute = true;
p.StartInfo.CreateNoWindow = true;
p.Star
p.Start();
p.WaitForExit();
}
...
Natürlich muß ich meine datei xcopy.bat im projetverzeichnis speichern oder??

Viel Grüße und schönes wochenende
Bitte warten ..
Mitglied: Biber
24.02.2006 um 15:13 Uhr
Hm, cinda,

ich meinte es so:
die XCopy-Zeile im "alten" Batch könntest Du so aufrufen wie oben beschrieben.
Evtl etwas anpassen in der programmzeile:
p.StartInfo.FileName = xcopy ---> p.StartInfo.FileName = "xcopy.exe"

Bei der 2. "alten Batchzeile" geht das nicht.
Die müsstest Du wieder als neunen Prozeß definieren.

Und dann:

...
...
p.StartInfo.FileName = "Cmd.exe"
p.StartInfo.Arguments = " /c DEL filename.exe";
.....

So meinte ich das.

Gruß Biber
P.S. Klappt übrigens jetzt die Zeitmessung im anderen Thread?
Bitte warten ..
Mitglied: cinda
24.02.2006 um 15:22 Uhr
Geht klar, habe verstanden.
Mit der Zeitmessung klappt wunderbar im batch, danke!
Ich glaube, ich kann sie nicht mehr anwenden, wenn ich xcopy direkt vom programm abrufe oder?!

viel Grüße
cinda
Bitte warten ..
Mitglied: Biber
24.02.2006 um 17:38 Uhr
Mit der Zeitmessung klappt wunderbar im batch, danke!
Ich glaube, ich kann sie nicht mehr anwenden,
wenn ich xcopy direkt vom programm
abrufe oder?!

Wenn Du die Zeitmessung nicht über einen Batch machst, müsstest Du die Zeit in Deinem C-Programm messen.
Und eigentlich würde ich auch diesen ganzen Block ( Xcopy, DEL und aktualisieren der Logdatei) von einem Batch machen lassen. Inhaltlich gehört es zusammen - ist aus Sicht Deines Programms eine black box. Wenn Du die StartZeit/EndeZeit in Deinem C-Programm ermittelst UND in dasselbe Logfile schreibst, in das auch die XCopy-Fehlermeldungen umgeleitet werden, ist es zwar von der Anzahl der Zeilen kein Mehraufwand... Du kannst also
- StartZeit/EndeZeit/Differnz in C ermitteln
- Xcopy.exe in C via "new Process()" aufrufen
- zum Löschen entweder über "new Process()"/ CMD.exe DEL .." ODER über C-Funktionen gehen
und so den Batch "einsparen" (nur die XCopy.exe aufrufen).

Aber was soll es - Du rufst so oder so einen "Fremdprozess" auf, weil es Unsinn wäre, den Xcopy noch mal neu zu programmieren. Und dann kann dieser "Fremdprozess", dieses externe programm auch ruhig ein Batch sein... dann lässt der sich später mal komplett anpassen oder austauschen, ohne dass Du Dein C-Programm ändern oder neu kompilieren musst.

Selbst wenn der Batch mal aus irgendwelchen Gründen später mal gar nicht mehr benötigt werden sollte... dann kannst Du diesen batch einfach als Datei mit dem bisherigen Namen und 0 Byte Inhalt oder mit einer Zeile "REM Dieser Batch wird nicht mehr benötigt" stehen lassen.. an Deinem C-Programm musst Du nichts mehr ändern.

Grüße zurück
Frank / der Biber aus Bremen
P.S. Deinen anderen Beitrag schließe ich dann mal.
Bitte warten ..
Mitglied: cinda
26.02.2006 um 20:01 Uhr
Hallo Biber:

ich wollte kurz meine beiden codenabschnitte (in c#) posten, da es keiner von denen funktionniert, vielleicht stimmt mit der syntax nicht:

private void Copyfiles()
{
Process p=null;
try
{
string xcopy = "%Ziel%\\*.* %Quelle% /E /Y /I /D";
p= new Process();
p.StartInfo.FileName = "xcopy.exe";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = true;
p.Start();
p.WaitForExit();
}
catch {

}
}

PS: Auf dieser zeile kann ich ja verzichten: string xcopy = "%Ziel%\\*.* %Quelle% /E /Y /I /D", wenn ich die batch datei im verzeichnisprojekt speichere.

2.
private void Deletfiles()
{
Process p=null;
try
{

p= new Process();
p.StartInfo.Arguments = " /c DEL C:\\image\\bilder\\bilder1\\bild.jpg.exe";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = true;
p.Start();
p.WaitForExit();
}
catch {

}
}

Viel Grüße
cinda
Bitte warten ..
Mitglied: Biber
26.02.2006 um 20:49 Uhr
Hallo cinda,

hab Dich schon richtig vermisst
Du hast aber auch Pech - entweder fragst Du mich grad etwas, wenn Werder Bremen spielt oder wenn ich "8 Mile" anschaue..

Deshalb habe ich jetzt auch nur während der Werbepause Zeit, und teste das mal nicht in meinem Dev-C++-Compiler.

Aber:
zu 1)
Ja, Du hast recht.. rufe da einen Batch auf... andernfalls kannst nicht so ("%quelle%) auf die CMD-Environment-Variablen zugreifen.
Die musst Du schon mit Environ("quelle") oder wie immer es in Deinem Compiler heißt, vorher ermitteln/auflösen.

zu 2)
p.StartInfo.FileName =cmd.exe
... solltest Du ergänzen. Das wird die ShellExec()-Funktion bzw. das Process()-Object nicht auf die Reihe bekommen, wenn keine ausführende Executable angegeben wird und die Aufrufzeile mit "/c DEL" anfängt..

uuups....sorry, melde mich nach der Werbepause wieder...

Grüße Biber
Bitte warten ..
Mitglied: cinda
26.02.2006 um 21:23 Uhr
Hey Biber,

geht klar, schaue dir in ruhe "8 Mile" , ich schaue mir gerade "Hero" von Jet Lee in prosieben.

Bitte nach der pause möglichst mit Beispiel erklären, da du manchmal "schinesisch" redest und ich verstehe nur Bahnhof

Grüße
Cinda
Bitte warten ..
Mitglied: Biber
27.02.2006 um 00:02 Uhr
Na gut, cinda,

ich versuche, weniger chinesisch zu schreiben, oder zumindest langsamer...

Also, wie weiter oben schon angedeutet: ich würde diese gesamte Xcopy/Del-Teilaufgabe von einem Batch machen lassen lassen.
Begründung:
a) es ist sinnvoller, die XCopy-Funktionalität zu nutzen alsdiese selber nachzuprogrammieren
b) das ganze ist aus Sicht Deines Programms EINE externe Funktion - entweder void oder mit EINEM Rückgabewert.
c) statt eines Batches mit zwei/drei Zeilen mit XCopy und Del könnte ebenso (siehe ganz oben) ein Robocopy /MIR-Aufruf stehen
d) es wäre unsinnig, das Dateien kopieren von Xcopy.exe ausführen zu lassen und davon unabhängig das Löschen einem neuen Prozess.

Mit der Strategie, die Du gewählt hast (new Process()) habe ich so etwas noch nicht probiert.
Mein Standartvorgehen dafür ist:
--------snipp cindaCallsXCopyDelBatch.cpp
#include &ltwindows.h&gt

HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);

int main ()
{
ShellExecute(NULL, "open", "z:\\Batches\\XCopyDel.bat", NULL, NULL, SW_HIDE) ;

return 0;
}
--------snipp cindaCallsXCopyDelBatch.cpp

...das heißt, wenn ich aus einem C#-Programm heraus eine Teilaufgabe an einen Batch delegiere, verzichte ich sogar auf Auswertung eines Errorlevels/eines Rückgabewerts. Denn der Batch sollte schon so programmiert sein, dass er eventuelle Fehler in eine Logdatei schreibt.
Und für Dein C#Programm macht es keinen Unterschied, ob das Sichern Erfolg hatte oder nicht... entweder es wurde gesichert UND gelöscht oder WEDER gesichert NOCH gelöscht... also brauchst Du keine Fehlerbehandlung machen. Und in eine Logdatei brauchst Du auch nichts schreiben - ist auch schon getan.

Also lass diese Teilaufgabe den Batch machen...komplett.
"Alle unter einem Himmel", um Jet Lee zu zitieren...

Angenehmen Wochenbeginn
Biber
Bitte warten ..
Mitglied: cinda
27.02.2006 um 11:45 Uhr
Hallo Biber,

alles kalro Danke und dir auch wünsche ich einen angenehmen Wochenanfang!

Viel Grüße
Cinda
Bitte warten ..
Mitglied: cinda
27.02.2006 um 16:36 Uhr
Hallo Biber,

ich habe den process so gerufen, aber es funktionniert nicht. Hast du sowas schon mal getestet?


private void Copyfiles()
{
Process p=null;
try
{
p= new Process();
p.StartInfo.FileName = "xcopy.exe";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = true;
p.Start();
p.WaitForExit();
}
catch {

}
}

Grüße
Cinda
Bitte warten ..
Mitglied: cinda
28.02.2006 um 10:39 Uhr
Hallo Biber,

ich habe es anders probiert und es hat geklappt:

private void Copy()
{
Process p=null;
try
{
p= new Process();
p.StartInfo.FileName = "xcopy.exe";
p.StartInfo.Arguments = @"C:\temp\abc D:\temp\abc";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
}
catch {

}
}

Wenn ich ihn aber die quelle und ziel als parameter gebe funktionniert das nicht:

quelle= @"C:\temp\abc";
ziel = @"D:\temp\abc";

private void Copy()
{
Process p=null;
try
{
p= new Process();
p.StartInfo.FileName = "xcopy.exe";
p.StartInfo.Arguments = quelle + ziel ;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = true;
p.Start();
p.WaitForExit();
}
catch {

}
}


Viel Grüße
Cinda
Bitte warten ..
Mitglied: Biber
28.02.2006 um 11:50 Uhr
Moin cinda,
im zweiten Copy()-Beispiel fehlt Dir doch auch ein Leerzeichen zwischen quelle und ziel, oder?

Wenn Du da noch eins einfügst, sollte es doch klappen.

Grüße
Biber
Bitte warten ..
Mitglied: cinda
28.02.2006 um 12:25 Uhr
Hallo biber,

wenn du so meinst, klappt auch nicht

private void Copy()
{
Process p=null;
try
{
p= new Process();
p.StartInfo.FileName = "xcopy.exe";
p.StartInfo.Arguments = quelle ziel ;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = true;
p.Start();
p.WaitForExit();
}
catch {

}
}

Grüße
Cinda
Bitte warten ..
Mitglied: Biber
28.02.2006 um 12:45 Uhr
*lacht*

Ich meinte eigentlich mehr so:
p.StartInfo.Arguments = quelle + " "+ ziel ;

...aber Deine Variante ist auch witzig...
Grüße
Biber
Bitte warten ..
Mitglied: cinda
28.02.2006 um 13:14 Uhr
Ich weiß, das sah unlogisch aus. Ich habe heute meinen kopf zuhause vergessen. Mindestens habe ich dich zum lachen gebracht

Mit dem leerzeichen hast du recht. Es hat geklappt!

Viele Grüße
Cinda
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
FTP Bath Skipt DEL geht nicht
gelöst Frage von JoeTeeBatch & Shell2 Kommentare

Hi, ich habe das folgende Skirpt am Laufen echo open %server%>ftpcmd2.dat echo user %user%>>ftpcmd2.dat echo %password%>>ftpcmd2.dat echo prompt>>ftpcmd2.dat echo ...

Windows 8
Xcopy kann den Pfad nicht finden warum?
gelöst Frage von Mbrgel69Windows 86 Kommentare

Wenn ich ein Batch mit xcopy schreibe: echo off xcopy *.bat C:\test\ pause Kopiert er diese ohne Probleme! Möchte ...

Batch & Shell
Xcopy Auswertung in Variable speichern
Frage von NightythehawkBatch & Shell10 Kommentare

Hallo Admins & Co, bin gerade auf der Suche nach einer Möglichkeit die Auswertung meiner Batchdatei in eine Variable ...

Batch & Shell
Xcopy Quelldatei Löschen
Frage von 119151Batch & Shell7 Kommentare

Hallo Zusammen, ich habe folgendes Problem. Ich möchte das nur die Dateiformate (pdf jpg usw.) aus den Unterordnen A, ...

Neue Wissensbeiträge
Drucker und Scanner
HP-MF-Drucker per Fax angreifbsr
Information von Lochkartenstanzer vor 1 TagDrucker und Scanner3 Kommentare

Endlich eine sinnvolle Verwendung für Faxe: Damit kann man offensichtlich den Drucker übernehmen. lks

Router & Routing

Das pfSense Buch ist jetzt für jeden kostenlos zu beziehen

Tipp von magicteddy vor 2 TagenRouter & Routing2 Kommentare

Bisher war das Buch nur für zahlende Unterstützer verfügbar, jetzt steht für Jedermann kostenlos zur Verfügung. Siehe auch The ...

Firewall

Möglicherweise neue Sicherheitslücke in Mikrotik-Firmware

Information von LordGurke vor 4 TagenFirewall3 Kommentare

Hallo zusammen, vor ein paar Monaten gab es ja bereits eine Sicherheitslücke in der Firmware von Mikrotik-Routern, über welche ...

Erkennung und -Abwehr
Rechner hacken mit Cortana, auch Remote
Information von Lochkartenstanzer vor 5 TagenErkennung und -Abwehr3 Kommentare

heise berichtet über den Vortrag von der Blackhat Open Sesame: Picking Locks with Cortana. Einige Fehler sind schon gefixt, ...

Heiß diskutierte Inhalte
Windows 10
WIN 10 1803 - LTE Stick kein Internetzugriff
Frage von killtecWindows 1023 Kommentare

Hallo, ich habe mit einem Windows 10 1803 Probleme mit einem LTE-Stick. Das gleiche Problem ist bei mehreren Rechnern ...

CPU, RAM, Mainboards
Xeon E5620: noch schnell genug?
Frage von ahussainCPU, RAM, Mainboards19 Kommentare

Hallo allerseits, ich habe die Möglichkeit, aus Restbeständen einen Tower mit Xeon E5620 CPU und 24 GB RAM zu ...

Datenbanken
MySQL Datenbank Import Aufgabe für mehrere .csv dateien
Frage von Marcel1989Datenbanken18 Kommentare

Hi, ich komm nicht weiter. Ich hab auf einem Windows Server 2012 r2 eine MariaDB/MySQL laufen. Nun soll diese ...

Peripheriegeräte
Steckdose(nleiste) mit Schwellwert für off und mit externem Taster
Frage von ahstaxPeripheriegeräte16 Kommentare

Hallo, ich suche eine Steckdose oder Steckdosenleiste mit externem Taster und Schwellwerterkennung. Zu realisieren ist folgendes: Ein PC soll ...