Wie Argumente übergeben werden (kein command line arguments), um Funktionen innerhalb des batch-scripts
Schreibe ich eine batch Datei für die Automatisierung der Erstellung von typischen Ordner-Strukturen für Produkte, die wir verkaufen. Ich möchte in der Lage sein, rufe meine batch-Datei mit 2 optionalen Argumente; den Namen des Lieferanten und eine Datei für die Erstellung viele Ordner auf einmal. Wenn kein Anbieter geliefert wird das Skript fragt über den standard-input, wer der Lieferant ist. Wenn keine Datei angegeben ist, das Skript fragt nach dem Namen des Ordners, den Sie erstellen möchten. Wenn eine Datei ist als argument übergeben, möchte ich das Skript zum Lesen der Datei zeilenweise und erstellen Sie einen Ordner für jede Zeile, benannt nach dem Inhalt der Zeile. Hier ist die :readFile
Funktion:
:readFile
echo "Reading from file: %theFile%"
FOR /F "delims=," %%a IN (%theFile%) do (
call:makeFolder %%a
)
goto:EOF
Hier ist die :makeFolder
- Funktion, die Optional nimmt das argument der name des Ordners zu erstellen. Wenn kein argument angegeben wird, es fragt nach dem Namen, über standard-Eingabe.
:makeFolder
if [%1]==[] (
set /p product="Enter product name: "
) else (
set product=%1
)
if exist "P:\%supplier%\Products\%product%" (
echo.
echo The folder '%product%' already exists.
echo.
goto:EOF
)
mkdir "P:\%supplier%\Products\%product%\Images\Web Ready"
mkdir "P:\%supplier%\Products\%product%\Images\Supplied"
mkdir "P:\%supplier%\Products\%product%\Images\Edited"
goto:EOF
Mein problem ist, dass in der :makeFolder
Funktion %1
bezieht sich auf das 1. argument in der Befehlszeile angegeben wird, nicht in der :readFile
Funktion. Wie kann ich das erreichen? Caveat: ich bin sehr neue batch-scripting, so dass Sie haben können, um mit mir zu sprechen, wie ich bin ein bisschen dumm.
Dies sollte eine Antwort sein, meiner Meinung nach. Ich begreife, dass es ist eine Vermutung, aber es ist eine wahrscheinliche Vermutung. Und auch wenn es sich falsch in der OP der Fall, sollte es noch da sein als möglich beantworten, für andere Menschen (diejenigen, die kommen können, über diese Frage) zu betrachten.
Tut mir Leid, ich verstehe nicht, was ist
exit /b'day
? Ich verstehe, dass $1 ist der erste parameter von der Kommandozeile aus, aber wie ich es verstehe, verwenden Sie ebenfalls $1, wenn in Bezug auf das erste argument einer Funktion. Meine Frage ist, was kann ich tun, um Zugriff auf das erste argument übergeben :makeFolder
ohne Bezug auf die 1. Kommandozeilen-argument?%1
ist der erste parameter auf der Kommandozeile nur in den Haupt-Teil der batch-Datei. Innerhalb einer Funktion %1
bedeutet, dass der erste parameter der Funktion. Innerhalb einer Funktion haben Sie keinen direkten Zugriff auf die Parameter der Kommandozeile.Ich glaube, Sie sind falsch mit Ihrem problem Beschreibung. Ich schlage vor, Sie legen eine
echo Parameter for makeFolder: %%a
vor dem Aufruf von es und ein echo Parameter received %1
in der ersten Zeile der makeFolder. Dies kann Ihnen helfen, zu sehen, was passiert.InformationsquelleAutor MrMisterMan | 2011-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Baue die Datei und es funktionierte
Aber ich würde empfehlen die Verwendung verzögert die expansion, wie Sie können, bekam Probleme mit der Prozent expansion von Sonderzeichen( In diesem Fall nicht sehr relevant, da Sonderzeichen sind eine schlechte Wahl für Datei - /Verzeichnis-Namen).
Gute Frage, nach 5 Jahren kann ich mich nicht erinnern, was ich schreiben wollte, so habe ich zu erraten
InformationsquelleAutor jeb