PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Batch - einige Fragen


Darthshoot
27.09.2006, 15:12
Hallo!

Steige nach einer langen langen JK2 Suchtkarriere wieder ins Programmieren ein und will meine schwachen, einst guten Batchkenntnisse wieder ein wenig auffrischen.

1. z.B. if '%1=='bla goto ende

bedeutet so viel wie wenn %1 bla ist, wird ans Ende gesprungen. Aber wie kann man aus %1 bla machen? irgendwie mit set? Aufjedenfall krieg ichs alleine nicht hin :(

2. Ich würde gerne mit einer Leerstelle Text in eine Datei schreiben:

echo blablabla>>file.txt

Es soll also blablabla in file.txt reingeschrieben werden. Besser gesagt ANGEFÜGT. Wenn der Inhalt von file.txt "test" sein würde, dann würde der Inhalt nach dem ausführen der Batch so aussehen: testblablabla.
Ich wills aber so haben:

test
blablabla

Ok ich bin wieder zurück und ihr werdet wieder öfters von mir hören;) :D

Danke im Voraus!
MfG Darthshoot!


Mac Fly
27.09.2006, 15:21
Zu 1:
%1 ist glaub der erste Parameter, der dem Script mitgeschickt wird. Bin aber grade nicht sicher.

Zu 2:

echo "\nblabla" >> file.txt
Müsste funktionieren

Darthshoot
27.09.2006, 15:35
Hi! Danke für die Antwort. Was mache ich denn, wenn ich einfach nur ne Leerstelle einfügen will?

echo \n>file.txt

Funktioniert nicht :(

Zu 1: Aber wie werden denn die Parameter mitgeliefert? Besser gefragt von was? Also woher weiß ich, was %1 oder %2 ist, wenn man es nicht selber einstellen kann?

mnemonic
27.09.2006, 16:16
Was mache ich denn, wenn ich einfach nur ne Leerstelle einfügen will?
Leerstelle oder Leerzeile?
Eine Leerstelle bekommst Du so hin:
echo. > test.txt Allerdings hängt echo immer einen Zeilenvorschub an.


Zu 1: Aber wie werden denn die Parameter mitgeliefert? Besser gefragt von was? Also woher weiß ich, was %1 oder %2 ist, wenn man es nicht selber einstellen kann?
Das gibst Du über die Kommandozeile an.
Bei z.B. "mybat.bat erster zweiter" ist innerhalb von "mybat.bat" "%1" gleich "erster" und "%2" gleich "zweiter".

Darthshoot
27.09.2006, 17:02
Hmm also werden einfach nur %1 %2 Wörter im Text definiert? Das ist aber sinnlos lol.

Ich wollte ne Leerzeile haben. Und Text anfügen, nicht überschreiben. Das ist ja gerade das Problem :/

EDIT: Warum geht ctty eigendlich nicht mehr?

mnemonic
27.09.2006, 17:12
Hmm also werden einfach nur %1 %2 Wörter im Text definiert? Das ist aber sinnlos lol.
Keine Ahnung was Du meinst... Wörter? Text? :confused:


Ich wollte ne Leerzeile haben. Und Text anfügen, nicht überschreiben. Das ist ja gerade das Problem :/
echo.>>test.txt Fügt eine Zeile an.

Und um zu Deinem ersten Post zurückzukommen:
echo test > test.txt
echo blablabla >> test.txt Inhalt von test.txt:
test
blablabla

Darthshoot
27.09.2006, 17:59
Aber "test" steht ja schon in file.txt drin :) und dann wird es ja gelöscht.
Aber egal! Ich hab jetzt alle Probleme gelößt. Vielen Dank für eure Hilfe! Ohne euch hätte ich das net geschafft :o

Ok noch 2 Fragen.

1. Was isn mit ctty?

2. Ich habe jetzt ein Problem. Undzwar will ich alle .txt Files finden mit:

for %%a in (*.txt) do set A=%%a

Und dann Text anfügen. Aber warum auch immer, nimmt er nur ein einziges File mit dem Buchstaben, was möglichst weit hinten im Alphabet kommt.

Also z.B. wenn es 3 Files gibt: a.txt b.txt und c.txt, dann nimmt er sich c.txt und b und a nicht :( warum? Text wird mit >> eingefügt.

amoxys
28.09.2006, 03:07
2. Ich habe jetzt ein Problem. Undzwar will ich alle .txt Files finden mit:

for %%a in (*.txt) do set A=%%a

Und dann Text anfügen. Aber warum auch immer, nimmt er nur ein einziges File mit dem Buchstaben, was möglichst weit hinten im Alphabet kommt.

Also z.B. wenn es 3 Files gibt: a.txt b.txt und c.txt, dann nimmt er sich c.txt und b und a nicht :( warum? Text wird mit >> eingefügt.

Hmm.. Zuerst setzt du A auf a.txt, dann auf b.txt, dann auf c.txt. Das Anfügen muss auch in einer Schleife erfolgen.

Darthshoot
28.09.2006, 06:45
Und wie setze ich die auf A,B,C? Normalerweise sind doch nach diesem Command alle gefundenen Batchdateien in eine Variable gefasst und es müsste auch normalerweise keine Schleife vollzogen werden?

Darthshoot
28.09.2006, 14:35
Mal abgesehen von der noch offenen Frage, wie man den Zeiger zuerst auf A, dann B und dann C etc. stellt, habe ich noch eine zweite.

Mir ist aufgefallen, dass Batchscripts nicht richtig arbeiten, wenn sie per Registry geladen werden, oder sie irgendwie anders gestartet werden. Sie funktionieren scheinbar nur richtig, wenn man sie per Mausklick startet.

Ich habe ein Script gemacht, dass verschidenes in irgendwelche .txt Dateien reinschreibt und dieses Script soll per Registry gestartet werden. Es macht es aber nicht. also die Konsole startet sich, aber es passiert nichts. Kann mir einer sagen, wie man es richtig macht?

Darthshoot
04.10.2006, 14:37
Ok egal was ich vorher gepostet habe.. ich hab nur noch eine Frage! Ich werd noch verrückt! Ich weiß jetzt zwar was mit %1 und so gemeint ist, aber nicht, wie man %1 einen bestimmten Wert gibt.

Also z.B.

if '%1=='test goto irgendwohin.

Das steht bei manchen Batchdateien ganz oben am Anfang oO aber wie kann man denn eine IF-Abfrage mit %1 machen, wenn man %1 noch gar keinen Wert gegeben hat? Bitte helft mir :(

sick bastard
04.10.2006, 14:59
%1 ist der erste parameter beim aufruf deiner batch-datei!

Beispiel:
mybat.bat param1 param2

-> in der .bat-Datei ist nun unter %1 "param1" und unter %2 "param2"

Darthshoot
05.10.2006, 12:30
Ok danke erstmal. Ich brauche allerdings noch eine Zustimmung:

echo hallo!>test.txt parm1

Jetzt kommt test.txt und dieser hat nun für immer den Parameter %1 = parm1? Wofür braucht man das denn überhaupt? Jo genau. Wenn mir das mal einer erklärt, dann kommt der Rest bestimmt von selbst :D

sick bastard
05.10.2006, 12:58
Ich habe eigentlich was völlig anderes geschrieben...

Schau mal hier: http://www.weihenstephan.de/dvs/edvgw/e07_21.htm

(allgemein: http://www.weihenstephan.de/dvs/edvgw/e07_18.htm )

Diese Seite bietet einen guten Überblick: http://www.antonis.de/dos/batchtut/pittipla/index.htm

Darthshoot
05.10.2006, 13:21
Ok danke. Aber ich habs leider net verstanden :mauer:
Egal. Ich habe noch folgendes Problem:

::Deleter
for %%a in (*.tmp) do set A=%%a
find "Deleter"<%A%>NUL
if not errorlevel 1 goto Ende
del %A%
:Ende

Dieses kleine Aufräumscript soll dumme .tmps löschen. Aber nicht sich selber! Leider bleibt er stehen, sobald er seine Marke findet. Er sollte eben alle .tmps löschen und die Marke "Deleter" soll verhindern, dass er sich selbst löscht. Tja und wie kann ich ihm sagen, dass er einfach die nächste Datei nehmen soll?

Darthshoot
05.10.2006, 13:46
Sorry für Doppelpost, aber warum auch immer.. ich kann nicht editieren. (Seite kann nicht angezeigt werden.)

Ich würde gerne den aktuellen Tag abfragen:

@echo off
echo. | date | find "5">NUL
if not errorlevel 1 echo hallo!
pause

Aber so richtig klappen tut es nicht. Es reicht ihm scheinbar, wenn in Tag/Monat/Jahr eine 5 vorkommt. Aber es soll nur der Tag abgefragt werden. Wie geht das?

Darthshoot
07.10.2006, 19:30
Naja.. falls mal irgendeiner irgendwann ne Antwort für mich hat wärs schon cool. Hab noch ne Frage:

Ist es möglich (wenn ja, wie?) das CDROM Laufwerk / Brennlaufwerk aus zu fahren / ein zu fahren?