Batchfile

Hi, ich hoffe Ihr könnt mir helfen.
Folgendes Problem: Ich soll eine Batchfile schreiben, bei der Benutzer gefragt wird in welches Verzeichnis die Datei hinkopiert werden sollen. Er muß den Pfad selber bestimmen können. Dieses Verzeichnis muß dann erstellt werden, wenn es noch nicht vorhanden ist. Was muß ich machen damit das funktioniert??
Helft mit bitte.

Danke Susanne.

hi,
ich hab zwar keine idee, wie man einen string innerhalb einer batch abfragen kann,
aber als parameter dh:

„C:\BATCH.BAT PATH“

inhalt der batch.bat

@echo off
echo
if not exist %1 goto MAKED
echo Pfad %1 existiert
goto ende

MAKED

echo nicht.
echo %1 wird jetzt angelegt
md %1

ende

echo datei wird nun kopiert
copy DATEI.DAT %1\DATEI.DAT

ups, kleiner fehler -> SR1
sorry, man kann mit exist nicht abfragen,
ob ein verzeichnis existiert.
es ginge nur eine abfrage ob in dem verzeichnis ne datei existiert.
da muesste man erst eine anlegen, falls darin keine ist. das wäre alles zu aufwendig.
ich hab da ne andere viel schnellere und kuerzere idee.

inhalt der batch.bat

@echo off
echo %1 wird jetzt angelegt
md %1
echo datei wird nun kopiert
copy DATEI.DAT %1\DATEI.DAT

wenn ein verzeichnis existiert, dann juckt das MD nicht. es zeigt halt an, das es schon existert, mehr nicht. und wenns noch nich existiert legt er es halt an. cool oder :smile:

cu dennis

sorry, man kann mit exist nicht abfragen,
ob ein verzeichnis existiert.
es ginge nur eine abfrage ob in dem
verzeichnis ne datei existiert.

Ich habs nicht probier aber kann man nicht nach der Datei c:\verzeichnis. fragen?
Müßte eigentlich gehen.

hi,

Ich habs nicht probier aber kann man
nicht nach der Datei c:\verzeichnis.
fragen?

nein, „.“ und „…“ sind ja auch verzeichnisse!
„.“ ist das verzeichnis in dem man sich gerade befindet und „…“ ist das uebergeordnete.

mit exist kann man aber nur nach dateien fragen …

cu dennis

ps: habs ausprobiert

nein, „.“ und „…“ sind ja auch
verzeichnisse!
„.“ ist das verzeichnis in dem man sich
gerade befindet und „…“ ist das
uebergeordnete.

mit exist kann man aber nur nach dateien
fragen …

Habs gerade auch mal ausprobiert interressanterweise funktioniert es unter Winnt und W2k auch auf „normale Verzeichnise“.
Was benutzt du?

Was benutzt du?

hi,

ich benutze zur zeit e-business-client (win95).
unter NT hatte ich noch keine „chance“ es auszuprobieren.

cu dennis

hi,

Ich habs nicht probier aber kann man
nicht nach der Datei c:\verzeichnis.
fragen?

nein, „.“ und „…“ sind ja auch
verzeichnisse!
„.“ ist das verzeichnis in dem man sich
gerade befindet und „…“ ist das
uebergeordnete.

mit exist kann man aber nur nach dateien
fragen …

cu dennis

Kleiner Trick dazu:
Man testet, ob die NUL-Daztei existiert (sie existiert per Definition in jedem Verzeichnis:

if exist %1\nul goto GIBTS
echo Gibt es nicht!
md %1
goto weiter

gibts

echo Gibt es schon!

weiter

Das funktioniert in allen mir bekannten DOS-Versionen (NT 4.0 inklusive).
Nicht getestet auf Win98, Win2000.

Gruß
J.

Habe leider noch eine Frage!!!
Erstmal muß ich mich bedanken!!!
Danke, dnake für Eure Hilfe.

Mein Problem ist folgendes: Ich muß denjenigenm, der die Batch ausführt auffordern, einen Namen für das zu erstellende Verzeichnis ein zu geben und mit diesen Namen muß ein Verzeichnis erstellt werden.

Wie kann ich mir das zurecht biegen???
Bye Susanne

PS: Nochmal herzlichen Dank für Eure Hilfe!!

hi,

Erstmal muß ich mich bedanken!!!
Danke, dnake für Eure Hilfe.

bitte :smile:

Mein Problem ist folgendes: Ich muß
denjenigenm, der die Batch ausführt
auffordern, einen Namen für das zu
erstellende Verzeichnis ein zu geben und
mit diesen Namen muß ein Verzeichnis
erstellt werden.

Wie kann ich mir das zurecht biegen???

hmm…
also, es gibt oder gab mal dieses 4DOS.
ich glaub das ist ein DOS von irgendeiner anderen Firma als M$.
da gab es einen befehl, der auch strings einlesen konnte.
aber unter MS-DOS gibs sowas nicht.
es gäbe noch eine sehr aufwendige methode,
mit der es auch unter MS-DOS gehen dürfte.
dazu misbraucht man einfach den CHOICE befehl.
der kann allerdings immer nur einen buchstaben einlesen.
er kann auch keine gross/kleinschreibung sondern nur gross-schreibung und wenn man ein zeichen wieder loeschen will, geht das dann nicht mehr.

dazu müsstest du ein CHOICE mit dem gesamten alphabet aufbauen und dann immer die errorlevel abfragen.
dann setzt du mit den so ermittelten werten in einer systemvariable zb USRPATH=… den pfad zusammen.
USRPATH=%USERPATH%A

das ganze musst du dann in eine schleife packen.
dann musst du noch definieren, das bei einem bestimmten zeichen zb @ die eingabe beendet wird.

noch ein nachteil bei choice ist, das er bei jedem zeichen eine neue zeile beginnt.
du hast dann also eine total haessliche ausgabe.

ich empfehle, die sache nicht per batchfile zu machen.
besser wäre es direkt mit einer programmiersprache zu realisieren.

oh, doch, ich glaub ich hab noch ne idee.

schau mal ob QBASIC drauf is …
damit dürfte es kein prob mehr sein.
aber qbasic hab ich schon lange nicht mehr gemacht. da musst du wen anderes fragen.

in pascal muesste das so aussehen

uses Crt;

var
s: string;

begin
write('geben sie den pfad an : ');
Readln(S);
mkdir(S); {ich glaub so hieß der befehl}
end.

dann rufst du in der batch das prog auf
und danach kopierst du mit copy die datei.

cu dennis

Mein Problem ist folgendes: Ich muß
denjenigenm, der die Batch ausführt
auffordern, einen Namen für das zu
erstellende Verzeichnis ein zu geben und
mit diesen Namen muß ein Verzeichnis
erstellt werden.

Wie kann ich mir das zurecht biegen???
Bye Susanne

Meines Wissens bekommst Du das mit normalen Bordmitteln nicht hin (wer hierfür einen Vorschlag hat - hätte ich gern!)

Ansonsten kann ich nur empfehlen, das mit einer Parameterübergabe zu lösen:

Datei Test.bat:

@echo off
if „%1“=="" goto usage
rem testen
if exist %1\nul goto schonda
mkdir %1
if errorlevel 1 echo Verzeichnis %1 konnte nicht erstelltwerden!
if errorlevel 0 echo Verzeichnis %1 wurde erstellt
goto ende

schonda

echo Verzeichnis %1 kann nicht erstellt werden, da schon vorhanden
rem alternativ dazu:
rem Verzeichnis loeschen, falls vorhanden
rem rd /q /s %1
rem md %1
goto ende

usage

echo Diese Batchdatei funktioniert nur mit einem Parameter!

ende

Der Aufruf erfolg aus der Kommandozeile:
test MyDir

Gruß

J.

Danke
Ich danke Dir für die schnelle Antwort und versuche es gleich mal.

Wenn ich mal wieder ein Problem habe, melde ich mich wieder :wink:

Tschau Susi

Das Einlesen von Strings in ein Batchfile kann MSDOS, wie schon weiter
unten beschrieben, nicht. Ich habe aber eine Sammlung von Freeware-Progrämmchen
mit denen das geht. Du rufst dazu einfach eines der Progrämmchen aus der
Batchdatei auf, dieses liest den String und schreibt ihn in eine Environment-
Variable. Diese kann man problemlos in der Batch-Datei auslesen.
Wenn Du Interesse hast, kann ich Dir das schicken. Es ist gut dokumentiert.

mfg
Christof

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]