Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie mit einem BAT Datei Ordner überprüfen?
Hallo
Ich stehe gerade vor einem kleinen Rätsel....
Angenommen, ich will eine Datei überprüfen, ob diese vorhanden ist.
Das mache ich so:
if exist "C:\temp\Dateiname.exe"
Das ist mal kein Problem :)
So, habe das nun auch bei einem Ordner namens monday versucht, aber scheinbar klappt das hier nicht so wirklich.
if exist "C:\temp\monday\" rd "C:\temp\monday" /s /q
Warum klappt das nicht?
Vielen Dank für eure Hilfe und Unterstützung
Es muss anscheinend if exist "C:\temp\monday\NUL" heissen
Erstmal vielen Dank!
Das scheint nicht ganz zu klappen, zumindest schließt sich das Batch Fenster von alleine.
Angenommen, ich habe ein paar Ordner, die anfangs alle gleich lauten.
Als beispiel jetzt, ich habe ein paar Ordner drauf, die mit coding- beginnen :)
Das funktioniert auch nicht so bei mir...
if exist "C:\temp\coding-*\" rd "C:\temp\coding*\" /s /q
Es sollen einfach alle Ordner entfernt werden, die mit coding- beginnen.
Ist das irgendiwe machbar oder umsetzbar?
Danke
Calzifer
11.11.2011, 21:32
Es sollen einfach alle Ordner entfernt werden, die mit coding- beginnen.
Ist das irgendiwe machbar oder umsetzbar?
Mit einer Kombination aus
dir /A:D /B /S coding-*
und FOR (http://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle#FOR) müsste das Funktionieren.
Aber wenn du Windows 7 hast solltest du überlegen ob du nicht lieber die Powershell nutzt. Damit sollte es einfacher gehen.
Ungetestet:
for /d %%i in ("C:\temp\coding-*") do rd /s /q "%%i"
@German
Vielen Dank!
Hat auf Anhieb geklappt, auch wenn ich den Code noch nicht komplett verstehe, es klappt!
Vielen Dank an alle beteiligten!
Aus der Hilfe zu FOR
FOR /D %Variable IN (Satz) DO Befehl [Parameter]
Wenn der Satz Platzhalter enthält, dann bezieht sich der FOR-Befehl
auf Verzeichnisse und nicht auf Dateien.... und weil der Stern bekanntlich ein Platzhalter ist, werden alle Verzeichnisse die in dieses Schema passen nacheinander in die Variable übernommen.
Aus der Hilfe zu RD
/S Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis
zusätzlich zu dem Verzeichnis selbst. Wird verwendet, um ganze
Verzeichnisbäume zu löschen.
/Q Keine Nachfrage, ob die Verzeichnisbäume mit /S entfernt werden
sollen.Somit sollte alles erklärt sein.
Hi
Vielen Dank für Deine Info.
Ein wenig mehr blicke ich jetzt durch :)
Eine letzte Frage noch, ich habe ziemlich viele Variablen in dem Script.
Kann man die irgendwie ... ja wie solk ich sagen, entladen, so dass diese auf dem PC nicht mehr gespeichert sind?
Vielen Dank!
Super Forum hier :)
Es gibt mehrere Möglichkeiten.
Du kannst Variablen negieren
set "var=test"
echo %var%
set "var="
echo %var%
oder du setzt Variablen innerhalb einer Local Umgebung, dann sind die dort gesetzten oder veränderten Variablen auch nur dort gültig
set "var1=test1"
echo %var1%
setlocal
echo %var1%
set "var1=geaendert"
set "var2=test2"
echo %var1%
echo %var2%
endlocal
echo %var1%
echo %var2%
Wie du siehst hat %var1% nach endlocal seinen ursprünglichen Wert wieder, während %var2% nicht mehr gültig ist.
Das heißt jetzt, wenn ich ganz am Anfang meines Scriptes ..
setlocal
einfüge und ganz am ende
endlocal
sollte das Problem gelöst sein oder habe ich da jetzt was missverstanden?
Variablen, die innerhalb einer Instanz von cmd.exe gesetzt wurden, sind nur dort und in Tochterprozessen gültig.
Um es etwas einfacher zu sagen:
Hast du einen Batch per Doppelklick gestartet kannst du so viele Variablen setzen wie du willst. Er nimmt seine Variablen mit ins Grab, wenn er beendet wird.
Du kannst Variablen lediglich an andere Prozesse vererben, wenn du diese aus dem Batch heraus startest.
Im Allgemeinen musst du dir also überhaupt keine Gedanken darüber machen ;)
Ahh okay :)
Super, vielen Dank :)
Ja, wird mit Doppelklick gestartet und beendet sich dann am Ende selber :)
Vielen Dank!
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.