Poweshell programm in einen Batch packen wie?
Zu nächst muss ich sage, dass ich noch nie eine batch datei erstellt habe.
Ich habe mit powershell ein kleines Programm geschrieben, was eine Bestimmte txt datei umschreibt und mit den veränderungen mir eine neue Ausspuckt.
hier das programm:
Nun möchte ich, dass es für belibige txt per mausklicks geht, dass ma eine neue Datei einfach in ein programm zieht und er es automatisch wieder ausspuckt. Ich dachte sowas könnte mit einer Batch datei gehen, ich weis nur nicht wie.
Wenn es eine Bessere bzw. einfache lösung gibt würde es mich sehr freuen.
danke für eure hilfe.
Ich habe mit powershell ein kleines Programm geschrieben, was eine Bestimmte txt datei umschreibt und mit den veränderungen mir eine neue Ausspuckt.
hier das programm:
$Quelle="U:\Documents\PRDO.helaba_Fallback_out.txt"
get-content $Quelle |
select -Skip 1 |
set-content "$Quelle-temp"
move "$Quelle-temp" $Quelle -Force
$Ziel="U:\Documents\PRDO.helaba_Fallback_out_kon.txt"
get-Content $Quelle |
foreach-object {$_.TrimEnd(';')| Out-File -FilePath $Ziel -append}
Nun möchte ich, dass es für belibige txt per mausklicks geht, dass ma eine neue Datei einfach in ein programm zieht und er es automatisch wieder ausspuckt. Ich dachte sowas könnte mit einer Batch datei gehen, ich weis nur nicht wie.
Wenn es eine Bessere bzw. einfache lösung gibt würde es mich sehr freuen.
danke für eure hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168824
Url: https://administrator.de/forum/poweshell-programm-in-einen-batch-packen-wie-168824.html
Ausgedruckt am: 22.04.2025 um 13:04 Uhr
21 Kommentare
Neuester Kommentar
Aloha schuhmann,
das wäre ja sinnfrei
denn dann wäre es weiterhin immer dieselbe .txt
Anyway, ich frage mich, warum es jetzt im Batch sein muss, ich möchte doch annehmen, dass eine Parameterübergabe und eine Endlosschleife im Powershell auch möglich sind.
Im batch würde ich nämlich derartige Sachen dann per drag & drop das so ablaufen lassen (ohne Funktion)
Und genau dieses lässt sich doch mit Sicherheit auch in Powershell durchführen.
greetz André
das wäre ja sinnfrei
Anyway, ich frage mich, warum es jetzt im Batch sein muss, ich möchte doch annehmen, dass eine Parameterübergabe und eine Endlosschleife im Powershell auch möglich sind.
Im batch würde ich nämlich derartige Sachen dann per drag & drop das so ablaufen lassen (ohne Funktion)
:loop
if "%~1"=="" goto :eof
REM Hier könnte man den Aufruf des PS-Skriptes ausführen mit Parameterübergabe
shift
goto :loop
Und genau dieses lässt sich doch mit Sicherheit auch in Powershell durchführen.
greetz André
Aloha,
*grübel* dabei hielt ich mein Vorhaben doch für einfach und einleuchtend aber gut ^_^
Wenn ich mich richtig belesen habe, gibt es in PS keine Sprungmarken? Wie macht man dort dann Endlosschleifen, hm.
Anyway, um dir noch einmal zu erläutern, was ich meine:
Wenn ich eine Textdatei auf mein Batchskript ziehe, ist die Datei, sprich Dateipfad & Dateiname der %1 (Parameter 1) (Glaube bei PS ist es %args oder so, kann das sein?) - sodass ich dachte, dass man im PS das genauso umsetzen könnte, dass du dann
Wobei ich natürlich nicht weiß, ob es in PS auch möglich ist, den Parameter zu kürzen, für die geänderte Ausgabe.
Zur Veranschaulichung: Im Batch würde es equivalent dann so sein:
Sprich: Laufwerk, Pfad, Dateiname des Parameter 1 als fertiges nutzen, das gewünschte Präfix _kon hinzufügen und die Dateiendung hinzufügen.
Leider habe ich nie mit PS gearbeitet und weiß daher nicht, ob es dort auch so einfach geht aber ich dachte, PS könne mehr als batch und darum kam ich mit dieser Idee.
Und wenn man dann mehrere Dateien auswählt und auf das Skript zieht, lasse ich im Batch eine Endlosschleife (bis %1 leer ist) via Sprungmarken laufen aber das geht wohl nicht so einfach im PS (?) ...
greetz André
P.S.: Wobei man eigentlich das Setzen des Parameters/Arguments nicht extra definieren müsste und direkt verwenden könnte.
*grübel* dabei hielt ich mein Vorhaben doch für einfach und einleuchtend aber gut ^_^
Wenn ich mich richtig belesen habe, gibt es in PS keine Sprungmarken? Wie macht man dort dann Endlosschleifen, hm.
Anyway, um dir noch einmal zu erläutern, was ich meine:
Wenn ich eine Textdatei auf mein Batchskript ziehe, ist die Datei, sprich Dateipfad & Dateiname der %1 (Parameter 1) (Glaube bei PS ist es %args oder so, kann das sein?) - sodass ich dachte, dass man im PS das genauso umsetzen könnte, dass du dann
$Quelle="$args"
Wobei ich natürlich nicht weiß, ob es in PS auch möglich ist, den Parameter zu kürzen, für die geänderte Ausgabe.
Zur Veranschaulichung: Im Batch würde es equivalent dann so sein:
set Quelle="%~1"
set Ziel="%~dpn1_kon%~x1"
Sprich: Laufwerk, Pfad, Dateiname des Parameter 1 als fertiges nutzen, das gewünschte Präfix _kon hinzufügen und die Dateiendung hinzufügen.
Leider habe ich nie mit PS gearbeitet und weiß daher nicht, ob es dort auch so einfach geht aber ich dachte, PS könne mehr als batch und darum kam ich mit dieser Idee.
Und wenn man dann mehrere Dateien auswählt und auf das Skript zieht, lasse ich im Batch eine Endlosschleife (bis %1 leer ist) via Sprungmarken laufen aber das geht wohl nicht so einfach im PS (?) ...
greetz André
P.S.: Wobei man eigentlich das Setzen des Parameters/Arguments nicht extra definieren müsste und direkt verwenden könnte.
Achso, da hab ich woh nicht richtig aufmerksam gelesen. Dachte du wolltest dein PS1 Skript von einer bat aus starten.
Wenn du das Skript von Skyemugen nimmst, steht in der Variable %~1 der Dateiname, von der Datei die du per Drag and Drop auf die Bat gezogen hast.
Die kannst du dann wieder per Parameter an das PS1 Sktipt geben.
Versuch die bat mal wie folgt:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe "C:\Test\Sktipt.ps1 %~1"
In deinem Powershell Skript kannst du auf die Variable $ARGS zugreifen, die enthällt den Parameter.
Sprich, du ziehst eine Datei auf deine BAT. Innerhalb der Bat wird der Dateiname als %~1 weitergegeben und im Powershellskript kannst du per $ARGS drauf zugreifen.
Wenn du das Skript von Skyemugen nimmst, steht in der Variable %~1 der Dateiname, von der Datei die du per Drag and Drop auf die Bat gezogen hast.
Die kannst du dann wieder per Parameter an das PS1 Sktipt geben.
Versuch die bat mal wie folgt:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe "C:\Test\Sktipt.ps1 %~1"
In deinem Powershell Skript kannst du auf die Variable $ARGS zugreifen, die enthällt den Parameter.
Sprich, du ziehst eine Datei auf deine BAT. Innerhalb der Bat wird der Dateiname als %~1 weitergegeben und im Powershellskript kannst du per $ARGS drauf zugreifen.
Aloha,
also wenn ich mir deine Historie angucke, dann glaube ich, dass es auch mit batch only möglich wäre:
Du willst doch nur das letzte Zeichen einer Zeile löschen, wenn es ein Semikolon ist, korrekt? Und immer soll die Zeile 1 übersprungen werden, richtig?
Der Code ist für das Drag&Drop einer oder mehrerer .txt-Dateien auf das Batchskript gemacht.
greetz André
also wenn ich mir deine Historie angucke, dann glaube ich, dass es auch mit batch only möglich wäre:
Du willst doch nur das letzte Zeichen einer Zeile löschen, wenn es ein Semikolon ist, korrekt? Und immer soll die Zeile 1 übersprungen werden, richtig?
@echo off & setlocal enabledelayedexpansion
:loop
if "%~1"=="" goto :eof
set "Ziel=%~dpn1_kon%~x1"
if exist "%Ziel%" del "%Ziel%"
for /f "usebackq delims= skip=1" %%s in ("%~1") do (
set "Zeile=%%s"
if "!Zeile:~-1!"==";" (echo !Zeile:~0,-1!>>"%Ziel%") else (echo !Zeile!>>"%Ziel%")
)
shift
goto :loop
Der Code ist für das Drag&Drop einer oder mehrerer .txt-Dateien auf das Batchskript gemacht.
greetz André
... kann ich nicht nachvollziehen (abgesehen davon, dass er wenn dann nur die Zieldatei löscht, wenn sie schon vorhanden ist ...), das Skript funktioniert einwandfrei ... und bitte nutze mal die Formatierung
Warum steht bei dir im Ziel dasselbe wie in %1, obwohl nach meinem Skript ein _kon wie gewollt dazwischengesetzt wird?
Ist das jetzt das Skript, was du so hingebastelt hast oder wie? Wenn ja, dann kann es nicht funktionieren, weil
Warum steht bei dir im Ziel dasselbe wie in %1, obwohl nach meinem Skript ein _kon wie gewollt dazwischengesetzt wird?
Ist das jetzt das Skript, was du so hingebastelt hast oder wie? Wenn ja, dann kann es nicht funktionieren, weil
- es für drag&drop ausgelegt ist
- keine Datei überschreibt, sondern eine neue erstellt (ansonsten bräuchte man VBS)
Aloha,
wie ich bereits erwähnte: Das funktioniert nur wenn dann mit VBS und das ist nicht mein Kenntnisgebiet, wenn es um umfangreichere Sachen geht ^_^
Wobei ich mir nicht sicher bin, ob VBS auch mit drag&drop ,spich: Mehrfachdateienabhandlung arbeiten kann.
Ok, man könnte natürlich auch im batch eines machen, das Ziel als temporär setzen, die Ausgangsdatei löschen und dann die temporäre Datei als Ausgangsdatei umbenennen und zu ihrem ursprünglichem Platz verschieben ... könnte man, wenn man unbedingt will.
greetz André
P.S.: ich weiß nicht wie es bei Powershell ist aber hier werden alle Leerzeichen zwangsläufig entfernt
wie ich bereits erwähnte: Das funktioniert nur wenn dann mit VBS und das ist nicht mein Kenntnisgebiet, wenn es um umfangreichere Sachen geht ^_^
Wobei ich mir nicht sicher bin, ob VBS auch mit drag&drop ,spich: Mehrfachdateienabhandlung arbeiten kann.
Ok, man könnte natürlich auch im batch eines machen, das Ziel als temporär setzen, die Ausgangsdatei löschen und dann die temporäre Datei als Ausgangsdatei umbenennen und zu ihrem ursprünglichem Platz verschieben ... könnte man, wenn man unbedingt will.
@echo off & setlocal enabledelayedexpansion
:loop
if "%~1"=="" goto :eof
set "Ziel=%temp%\%~nx1"
if exist "%Ziel%" del "%Ziel%"
for /f "usebackq delims= skip=1" %%s in ("%~1") do (
set "Zeile=%%s"
if "!Zeile:~-1!"==";" (echo !Zeile:~0,-1!>>"%Ziel%") else (echo !Zeile!>>"%Ziel%")
)
del "%~1"
move "%Ziel%" "%~dp1"
shift
goto :loop
greetz André
P.S.: ich weiß nicht wie es bei Powershell ist aber hier werden alle Leerzeichen zwangsläufig entfernt
Aloha,
aha, gut, das war mir nicht bewusst, dann sollte es so gehen:
greetz André
P.S.: Das kann bestimmt dauern bei großen Dateien, ob VBS nicht doch besser wäre, mal sehen, ob unsere VBS Spezis auch mal hineinschauen ^_^
edit: Warum hatte ich das überflüssige eol noch drin, war was anderes xD
aha, gut, das war mir nicht bewusst, dann sollte es so gehen:
@echo off & setlocal enabledelayedexpansion
:loop
if "%~1"=="" goto :eof
set "Ziel=%temp%\%~nx1"
if exist "%Ziel%" del "%Ziel%"
for /f "usebackq delims= skip=1" %%s in ("%~1") do (
set "Zeile=%%s"
if "!Zeile:~-1!"==";" (
call :short
) else (
echo !Zeile!>>"%Ziel%"
)
)
del "%~1"
move "%Ziel%" "%~dp1"
shift
goto :loop
:short
if "!Zeile:~-1!" neq ";" (
echo !Zeile!>>"%Ziel%"
goto :eof
)
set "Zeile=!Zeile:~0,-1!"
goto :short
greetz André
P.S.: Das kann bestimmt dauern bei großen Dateien, ob VBS nicht doch besser wäre, mal sehen, ob unsere VBS Spezis auch mal hineinschauen ^_^
edit: Warum hatte ich das überflüssige eol noch drin, war was anderes xD
Aloha,
ich erwähnte bereits, dass Leerzeilen gelöscht werden, wenn du die unbedingt mit reinhaben willst, muss ich gucken, wie ich das funktionstüchtig bekomme ...
edit:
greetz André
ich erwähnte bereits, dass Leerzeilen gelöscht werden, wenn du die unbedingt mit reinhaben willst, muss ich gucken, wie ich das funktionstüchtig bekomme ...
edit:
@echo off & setlocal enabledelayedexpansion
:loop
if "%~1"=="" goto :eof
set "Ziel=%temp%\%~nx1"
if exist "%Ziel%" del "%Ziel%"
for /f "tokens=1,* delims=: skip=1" %%r in ('findstr /n "^" "%~1"') do (
set "Zeile=%%s"
if "!Zeile:~-1!"==";" (
call :short
) else (
if "!Zeile!"=="" (
echo. >>"%Ziel%"
) else (
echo !Zeile!>>"%Ziel%"
)
)
)
del "%~1"
move "%Ziel%" "%~dp1"
shift
goto :loop
:short
if "!Zeile:~-1!" neq ";" (
echo !Zeile!>>"%Ziel%"
goto :eof
)
set "Zeile=!Zeile:~0,-1!"
goto :short
greetz André
Aloha,
So, ich hab' Feierabend und ob ich heute noch einmal reinschaue, weiß ich nicht ...
greetz André
- -Formatierung endlich mal nutzen! sonst lese ich mir hier gar nichts mehr durch
- brauchst du jetzt die Leerzeilen doch nicht oder wie hast du was in den Griff bekommen? wozu änder ich extra das Skript ...
- änder doch mal Zeile 1 in
@echo on & setlocal enabledelayedexpansion
und gucke mal, wo er wirklich hängt, denn ich kann das Problem einfach nicht nachvollziehen oder nachstellen - Wie viele Zeilen hat deine Textdatei und wie lang ist die längste Zeile?
- Und du hast bisher immer noch nicht ein einziges Mal gegrüßt oder Ähnliches ...
So, ich hab' Feierabend und ob ich heute noch einmal reinschaue, weiß ich nicht ...
greetz André
Aloha, home, sweet home
ah, klar, du hattest ja jetzt mit fester Quelle und festem Ziel und doch wieder mit neuer Datei ... ... da macht loop natürlich keinen SInn und bringt dir den Fehler, ich richtete mich nach
aber gut, wenn alle Fehler beseitigt sind, kannst du den Fremdlesern höchstens noch den Gefallen tun und deine Kommentare nachbearbeiten und mit Codeformatierung versehen, das wäre schön. Nicht zu vergessen, den Beitrag dann als
greetz André
ah, klar, du hattest ja jetzt mit fester Quelle und festem Ziel und doch wieder mit neuer Datei ... ... da macht loop natürlich keinen SInn und bringt dir den Fehler, ich richtete mich nach
neue Datei einfach in ein programm zieht
drag & drop (%1)die selbe art von verschiedenen txt dateien
Plural (:loop)aber gut, wenn alle Fehler beseitigt sind, kannst du den Fremdlesern höchstens noch den Gefallen tun und deine Kommentare nachbearbeiten und mit Codeformatierung versehen, das wäre schön. Nicht zu vergessen, den Beitrag dann als
greetz André