doldo Geschrieben 27. Januar 2010 Teilen Geschrieben 27. Januar 2010 Hallo, ich möchte diesen command in einem batch script unter der dos shell laufen lassen...startet den sqlloader! for %%i in (*.ctl) do sqlldr80 test/test@DB control=%MIC_CTLDIR%%%i data=%TARIFDIR%%%i Das File für %control% hat die endung *.ctl, das File für %data% hat die endung *.txt wenn ichs so mache wie oben list er für %data% eben "file.ctl" ein, es sollte aber "file.txt" heißen, wie kann ich die Dateierweiterung von %%i ändern ? Danke! doldo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 27. Januar 2010 Teilen Geschrieben 27. Januar 2010 for /f "tokens=1-2 delims=." %%i in ('dir *.ctl /b') do sqlldr80 test/test@DB control=%MIC_CTLDIR%%%i.%%j data=%TARIFDIR%%%i.txt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
doldo Geschrieben 27. Januar 2010 Autor Teilen Geschrieben 27. Januar 2010 danke, das mit dem /f habe ich auch gerade rausgefunden! was ich nicht 100% verstehe ist das "tokens=1-2 delims=." und dem %i.%%j aber es funktioniert... Danke!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 27. Januar 2010 Teilen Geschrieben 27. Januar 2010 tokens=1-2 delim=. macht aus dem zeug in den () eben die zwei teile und speichert sie in fortlaufenden variablen (%%i und %%j) ab: wenn du dir die ausgabe von "dir *.ctl /b" ansiehst, kommt da sowas wie filename1.ctl raus => das tokens-zeug trennt das bei delim (also .) auf in filename1 (=%%i) und ctl (=%%j). diese werte kann man dann nachher weiterverwenden... das geht natürlich mit verschiedenen delim-characters, unterschiedlichen tokens usw... dos war schon nicht so schlecht manchmal Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
doldo Geschrieben 27. Januar 2010 Autor Teilen Geschrieben 27. Januar 2010 Thx! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
doldo Geschrieben 28. Januar 2010 Autor Teilen Geschrieben 28. Januar 2010 tokens=1-2 delim=. macht aus dem zeug in den () eben die zwei teile und speichert sie in fortlaufenden variablen (%%i und %%j) ab: wenn du dir die ausgabe von "dir *.ctl /b" ansiehst, kommt da sowas wie filename1.ctl raus => das tokens-zeug trennt das bei delim (also .) auf in filename1 (=%%i) und ctl (=%%j). diese werte kann man dann nachher weiterverwenden... das geht natürlich mit verschiedenen delim-characters, unterschiedlichen tokens usw... dos war schon nicht so schlecht manchmal jetzt hätt ich noch ein feature eingebaut.... ist es möglich den Filenamen (%%i) so zu ändern dass ich "-5" abziehe vom Namen ? momentan ist es ja so, er sucht sich zum File 4000.ctl das textfile 4000.txt und führt eine Aktion aus! jetzt wär es lässig wenn zu 4000.ctl kein 4000.txt existiert, dass er nach 3995.txt sucht !! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 jetzt hätt ich noch ein feature eingebaut.... ist es möglich den Filenamen (%%i) so zu ändern dass ich "-5" abziehe vom Namen ? momentan ist es ja so, er sucht sich zum File 4000.ctl das textfile 4000.txt und führt eine Aktion aus! jetzt wär es lässig wenn zu 4000.ctl kein 4000.txt existiert, dass er nach 3995.txt sucht !! Nur so als Beispiel, wie es gehen könnte: set /a var=1000-5 In Komination mit IF EXIST bekommst du das sicherlich hin. Für komplexere Scripts würde ich die Windows Batchfiles hinter mir lassen, und cygwin installieren, dann kannst du "vollwertige" bash Scripts schreiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 ab jetzt kostets geld @echo off&set cnt= for /f "tokens=1-2 delims=." %%i in ('dir *.ctl /b') do set /a cnt=%%i IF NOT EXIST %%i.txt GOTO LOWERFILE sqlldr80 test/test@DB control=%MIC_CTLDIR%%%i.ctl data=%TARIFDIR%%%i.txt goto :END :LOWERFILE set /a cnt=%cnt%-5 sqlldr80 test/test@DB control=%MIC_CTLDIR%%%i.ctl data=%TARIFDIR%%cnt%.txt :END set cnt= Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 Du kannst dir übrigens das ganze "tokens" Zeugs sparen, weil du die einzelnen Namensteile eines Dateinamens auch so einfach extrahieren kannst, siehe "for /?" Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert. Sie können jetzt folgende Syntax verwenden: %~I - Expandiert %I und entfernt alle umschließenden Anführungszeichen ("). %~fI - Expandiert %I zu einem vollständigen Dateinamen. %~dI - erstellt nur den Laufwerkbuchstaben von %I. %~pI - erstellt nur den Pfad von %I. %~nI - erstellt nur den Dateinamen von %I. %~xI - erstellt nur die Dateierweiterung von %I. %~sI - erstellter Pfad enthält nur kurze Dateinamen. %~aI - erstellt die Dateiattribute von %I. %~tI - erstellt Datum und Zeit von %I. %~zI - erstellt die Dateigröße von %I. %~$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen angegebenen Verzeichnisse und expandiert die erste gefundene Datei %I zu dem vollständigen Dateinamen. Wenn der Name der Umgebungsvariablen nicht definiert ist oder diese Datei bei der Suche nicht gefunden wurde, wird dieser Parameter zu einer leeren Zeichenfolge expandiert. Diese Parameter können auch miteinander kombiniert werden: %~dpI - erstellt den Laufwerkbuchstaben und Pfad von %I. %~nxI - erstellt den Dateinamen und die Dateierweiterung von %I. %~fsI - Expandiert %I zu einem vollständigen Namen, der nur kurze Dateinamen enthält. %~dp$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen angegebenen Verzeichnisse nach %I und erstellt den Laufwerkbuchstaben und Pfad der ersten gefundenen Datei. %~ftzaI - Expandiert %I zu einer Zeile, die der Ausgabe des DIR- Befehls entspricht. In den angegebenen Beispielen können %I und PATH durch andere gültige Werte ersetzt werden. Der Ausdruck %~ wird durch einen gültigen Variablen- namen für FOR abgeschlossen. Die Verwendung von Großbuchstaben für die Namen von Variablen, wie z. B. %I, macht diese Ausdrücke leichter lesbar und vermeidet Verwechslungen mit den eigentlichen Parametern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 danke für den hinweis sollte dann so gehen: @echo off for %%I IN (*.ctl) do set /a cnt=%%~nI IF NOT EXIST %cnt%.txt GOTO LOWERFILE sqlldr80 test/test@DB control=%MIC_CTLDIR%%cnt%.ctl data=%TARIFDIR%%cnt%.txt goto :END :LOWERFILE set /a lcnt=%cnt%-5 sqlldr80 test/test@DB control=%MIC_CTLDIR%%cnt%.ctl data=%TARIFDIR%%lcnt%.txt :END set cnt= set lcnt= Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 danke für den hinweis sollte dann so gehen: @echo off for %%I IN (*.ctl) do set /a cnt=%%~nI IF NOT EXIST %cnt%.txt GOTO LOWERFILE sqlldr80 test/test@DB control=%MIC_CTLDIR%%cnt%.ctl data=%TARIFDIR%%cnt%.txt goto :END :LOWERFILE set /a lcnt=%cnt%-5 sqlldr80 test/test@DB control=%MIC_CTLDIR%%cnt%.ctl data=%TARIFDIR%%lcnt%.txt :END set cnt= set lcnt= Ah, wenn ich mir deinen Code so ansehe, kommen mir doch noch Bedenken. :f: Es wird nämlich genau eine Aktion mit sqlldr80 durchgeführt werden, nämlich die letzte In VBA würde hier das NEXT fehlen, in cmd.exe fehlen wohl ein Paar Klammern und Ampersand. Ja, die Batchverarbeitung in Win$ ist ein Hund Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
doldo Geschrieben 28. Januar 2010 Autor Teilen Geschrieben 28. Januar 2010 respekt jungs...danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 28. Januar 2010 Teilen Geschrieben 28. Januar 2010 Ah, wenn ich mir deinen Code so ansehe, kommen mir doch noch Bedenken. :f: Es wird nämlich genau eine Aktion mit sqlldr80 durchgeführt werden, nämlich die letzte In VBA würde hier das NEXT fehlen, in cmd.exe fehlen wohl ein Paar Klammern und Ampersand. Ja, die Batchverarbeitung in Win$ ist ein Hund du hast recht :f: statt dem setzen der variable muss da natürlich ein aufruf an ein anderes batchscript rein, dass dann die weiter unten stehenden aktionen macht manchmal sollt ich mir doch mehr zeit nehmen zum nachdenken... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.