W2K-Networker 11 Geschrieben 29. August 2011 Melden Teilen Geschrieben 29. August 2011 Hallo Board, ich habe hier ein kleines Problemchen, wo ich nicht weiter komme. Ich habe mir ein Skript geschrieben, wo ich in der Befehlszeile mehrere Aktionen gleichzeitig ausführe. for %%a in (%temp%\*.*) do sendmail -f %choice1% -t %choice2 -s %choice3% -a "%%a"&&echo %%a >>%temp%\report.txt Jetzt wird zwar jede Datei sauber in die report.txt geschrieben, nur beginnt jede zeile immer mit dem vollständigen verzeichnispfad. halt alles was in der %temp% Variable steht. C:\DOKUME~1\Username\LOKALE~1\Temp\test.jpg Jetzt will ich erreichen, dass in der report.txt nur noch der Dateiname reingeschrieben wird bzw. zu sehen ist. test.jpg Ich habe da schon etwas mit for /f "delims=" probiert, komme aber leider zu keinem erfolg. Aber vielleicht hat ja hier einer eine Idee. Vielen Dank Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 29. August 2011 Melden Teilen Geschrieben 29. August 2011 Wenn es denn mit einer Batch sein muss :) Dann reicht es, wenn du die for-Schleife wie folgt anpasst FOR /F %%a IN ('dir %temp%\*.* /A-D /B') DO ECHO %%a Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 30. August 2011 Autor Melden Teilen Geschrieben 30. August 2011 Hallo ZeroKnowledge, danke für die schnelle Antwort. Hat super funktioniert. Vielen vielen Dank. Hast du vielleicht noch ne kleine Erklärung für mich wie das funktioniert und was an welcher Stelle gemacht wird. So das ich das auch richtig verstehe und beim nächsten Mal die Lösung selber hinkrich. Danke Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 30. August 2011 Melden Teilen Geschrieben 30. August 2011 FOR /F ... IN ('...') ... DO ... Die For-Schleife führt den Befehl in Klammern aus und geht dann Zeile für Zeile durch das Ergebnis vom Aufruf durch. dir %temp%\*.* /A-D /B Listet den Inhalt vom %temp%-Verzeichnis auf, ignoriert dabei aber Verzeichnisse (/A-D) und benutzt das kurze Format (/B), zeigt also keine Zusammenfassung am Ende und spart sich den Pfad vor den Dateien. Für weitere Optionen (insbesondere für FOR) einfach mal auf der Kommandozeile dir /? bzw. for /? eingeben Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 31. August 2011 Autor Melden Teilen Geschrieben 31. August 2011 Hallo ZeroKnowledge, das mit der Erweiterung der FOR Schleife hat ja funktioniert. Nur habe ich mein Skript jetzt mal mit mehreren Dateien getestet und nun habe ich im LOG alle Dateien mehrfach drin zu stehen. Befehlszeile: for %%a in (%temp%\*.*) do sendmail -f %choice1% -t %choice2% -s %choice3% -a "%%a"&&echo.&&echo %%a&&FOR /F %%a IN ('dir %temp%\*.* /A-D /B') DO ECHO %%a >>%temp%\report.txt mein Report sieht nun so aus: arrow.gif barrow.gif bigfoot.bmp Blaue exclam.gif logowin.gif oemlogo.bmp s-logo-22.bmp Sonnenuntergang.jpg tips.gif verisign.bmp Wasserlilien.jpg whowhere.bmp Winter.jpg arrow.gif barrow.gif bigfoot.bmp Blaue exclam.gif logowin.gif oemlogo.bmp report.txt dieser Abschnitt wiederholt sich nun so oft wie ich Dateien in dem Verzeichnis habe Wo ist unser Denkfehler? Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 31. August 2011 Melden Teilen Geschrieben 31. August 2011 Ich sach mal, nicht Euer, sondern Dein Denkfehler ;) Du solltest Deine FOR-Schleife entspr. anpassen, nicht hinten dran hängen ;) So sollte es dann funktionieren: FOR /F %%a IN ('dir %temp%\*.* /A-D /B') DO sendmail -f %choice1% -t %choice2 -s %choice3% -a "%%a"&&echo %%a >>%temp%\report.txt Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 31. August 2011 Autor Melden Teilen Geschrieben 31. August 2011 Hallo, also das funktioniert so leider nicht. Es sagt er kann die Datei dir nicht finden und er versucht auch immer die Variable %%a mit dem dir zu füllen.. Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 31. August 2011 Melden Teilen Geschrieben 31. August 2011 Hört sich sehr danach an, dass du die Hochkommas vergessen hast. Ich wette du hast for /f %%a in (dir ...) do ... anstatt for /f %%a in ('dir ...') do ... in deiner Batch stehen. Man beachte den feinen Unterschied in den runden Klammern. Der Befehl in den Klammern ist im zweiten Teil von Hochkommas umschlossen. Sollte ich nicht recht haben, kopier mal die for-Schleife aus deiner Batch hier rein. Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 31. August 2011 Autor Melden Teilen Geschrieben 31. August 2011 Kleinigkeiten machen das Leben aus... OK, hab ich angepasst. Klappt leider noch nicht ganz. Aber fast, Befehlszeile: for %%a in ('dir %temp%\*.* /A-D /B') do echo -f %choice1% -t %choice2% -s %choice3% -a "%%a"&&echo %%a >>%temp%\report.txt Report: 'dir C:\DOKUME~1\User\LOKALE~1\Temp\11.gif C:\DOKUME~1\User\LOKALE~1\Temp\21.gif C:\DOKUME~1\User\LOKALE~1\Temp\12.bmp C:\DOKUME~1\User\LOKALE~1\Temp\31.jpg C:\DOKUME~1\User\LOKALE~1\Temp\22.bmp C:\DOKUME~1\User\LOKALE~1\Temp\report.txt C:\DOKUME~1\User\LOKALE~1\Temp\32.jpg /A-D /B' Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 31. August 2011 Autor Melden Teilen Geschrieben 31. August 2011 Hallo ZeroKnowledge, hallo Cybquest, ich habe mein kleinen Fehler gefunden. :jau: Mir ist das /F nach dem FOR abhanden gekommen. :shock: Nach dem hinzufügen des magischen /F klappt nun auch alles endlich. Vielen Dank nochmal an euch beide. :D Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 13. September 2011 Autor Melden Teilen Geschrieben 13. September 2011 Hallo Board, vielleicht könnt ihr mir ja auch noch folgende Frage beantworten: Kann ich in meiner FOR Schleife for %%a in ('dir %temp%\*.* /A-D /B') do echo -f %choice1% -t %choice2% -s %choice3% -a "%%a"&&echo %%a >>%temp%\report.txt die Dateien die ich in die report.txt schreibe auch durchnumerieren? Also das vor der Ausgabe des %%a immer eine Nummer steht? 1, 2, 3 usw.? Vielen Dank Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 14. September 2011 Melden Teilen Geschrieben 14. September 2011 Als erstes Mal, solltest du dir angewöhnen, die richtige Version von deinem Skript für weiter Fragen zu benutzen ;) Nun zur eigentlichen Frage SETLOCAL ENABLEDELAYEDEXPANSION SET cnt=1 FOR /F %%a IN ('dir %temp%\*.* /A-D /B') DO { sendmail -f %choice1% -t %choice2% -s %choice3% -a "%%a" ECHO !cnt!: %%a >>%temp%\report.txt SET /A cnt=!cnt!+1 } Das "Geheimnis" hierbei ist die erste Zeile und die Verwendung von ! anstatt %. Damit sollte es denn eigentlich auch funktionieren, zumindest hat es das bei mir^^ Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 15. September 2011 Autor Melden Teilen Geschrieben 15. September 2011 Hallo ZeroKnowledge, vielen Dank für deine schnelle und verständliche Antwort. :) Auch wenn ich es nicht verstehe warum ich ! anstatt % verwenden muss und wie genau das mit der SETLOCAL ENABLEDELAYEDEXPANSION funktioniert... aber man lernt ja nie aus. Nun funktioniert auch mein 2. Wunsch. Vielen Dank auch dafür. Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 16. September 2011 Melden Teilen Geschrieben 16. September 2011 Nachdem ich selber auch jedesmal nachschauen muss, was genau denn jetzt ENABLEDELAYEDEXPANSION macht, geb ich dir lieber gleich den Link ^^ Batcheero: How To ENABLEDELAYEDEXPANSION Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 16. September 2011 Autor Melden Teilen Geschrieben 16. September 2011 danke :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.