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, 7585 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
Batch Xcopy Probleme
gelöst Frage von GtaGamerBatch & Shell3 Kommentare

Hallo Administrator Community, Zurzeit versuche ich ein Tool für GTA 5 zu entwickeln, wo beim Start mit einer Batch ...

Batch & Shell
Xcopy Batch-Datei
gelöst Frage von LauchheimerBatch & Shell3 Kommentare

Tag Leute, Ich habe in einer Batchdatei einen xcopy-Befehl. Dieser soll eine bestimmte Datei kopieren. Diesen führe ich mit ...

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 ...

Batch & Shell
Xcopy Meldung Unterdrücken
gelöst Frage von Gimli3311Batch & Shell25 Kommentare

Guten Morgen Zusammen, Da ich schon im Vb for Application Bereich gute Hilfe bekommen habe, wende ich mich heute ...

Neue Wissensbeiträge
Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 5 StundenExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 19 StundenLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 2 TagenWindows Mobile

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 4 TagenInternet6 Kommentare

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Temporäre WLAN Verbindung für AD-Login
Frage von Christian.WidauerLAN, WAN, Wireless17 Kommentare

Hallo zusammen, ich weiß leider nicht unter welchem Begriff ich dafür suchen muss, daher habe ich bisher leider nichts ...

LAN, WAN, Wireless
Bekannte Drosselungen bei Providern ?
Frage von HenereLAN, WAN, Wireless15 Kommentare

Servus zusammen, in bereits angefangen, aber ich hoffe dass der Beitrag hier mehr Informationen bringt. Sind Portdrosselungen bzw gezielte ...

Netzwerkmanagement
Reverse Proxy für TCP und UDP Anfragen
gelöst Frage von flxklsNetzwerkmanagement14 Kommentare

Hallo zusammen, ich besitze einen Rootserver, der nur eine öffentliche IP besitzt und auf dem mehrere VMs laufen. Da ...

Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server14 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...