Sed existiert nicht für Windows 10 64bits aber?

561
ujsgeyrr1f0d0d0r0h1h0j0j_juj

Ich habe das folgende Unix-Skript:

ZECOM = /path/to/command/dothis for FILEg in *g.F do echo $FILEg FILE=`echo $FILEg | sed 's/g\./\./' | sed 's/\.F/\.f/'` $ZECOM -someoption -f ./optionsfile.sh $FILE $FILEg somelib.so  FILEZECOM=`echo $FILE | sed 's/\.f/\.zecomextension64/'` chmod ugo+x $FILEZECOM done 

dass ich in ein Batch-Skript übersetzen möchte.

Ich hatte die Idee dass :

SET ZECOM = "C:\path\to\command\dothis.exe"  for %%FILEg in (*g.F) do ( echo %%~nf SET FILE = `echo %%~nFILEg | sed 's/g\./\./' | sed 's/\.F/\.f/'` ZECOM -someoption -f %FILE% %%~nFILEg somelib.lib SET FILEZECOM=`echo %FILE% | sed 's/\.f/\.zecomextension64/'` cacls %FILEZECOM% /g everyone:f ) 

aber es funktioniert natürlich nicht, da sedes kein anerkannter Befehl ist ... Natürlich gibt es eine 32-Bit-GNU-Version von sed für Windows, die sich über einige fehlende DLLs beschwert. Was wären also meine Optionen / Alternativen in dieser Situation?

Einige Hintergrundinformationen :

Das Skript sucht in seinem Verzeichnis nach allen Dateien, die auf "gF" enden, und für eine solche Datei totog.Fgibt es auch eine Homologue-Datei (konstruktiv, im Moment möchte ich mein Skript ausführen) toto.f. dann führt das Skript den Befehl aus, acommandauf den ZECOMverweist: ZECOM -someoption -f %FILE% %%~nFILEg somelib.libDas heißt: acommand -someoption -f toto.f totog.F somelib.libWo someoptionist eine bestimmte Option des Befehls acommandund wo wird somelib.libangegeben, dass der Befehl ausgeführt werden soll, während eine Verknüpfung zur Bibliotheksdatei hergestellt wird somelib.lib.

Dies erzeugt eine Datei toto.zecomextension64. ("zecomextension64" ist die Erweiterung der erzeugten Dateien.) Dann caclsgibt der Benutzer alle Rechte für die erzeugte Datei. (Diese erzeugten Dateien werden von vielen verschiedenen Benutzern mit demselben Programm ausgeführt und gelesen, in dem sie alle in ihrer eigenen Sitzung ausgeführt werden.)

Basilly, ich habe sedUnix verwendet, um die String-Mappings "totog.F" --> "toto.f"und "toto.f" --> "toto.zecomextension64".

-1
Bei Metavariablen handelt es sich nur um einen Buchstaben mit getrenntem Gehäuse. Sie sollten erklären, was das Skript macht. Ansonsten könnten nur Personen antworten, die fließend beide Skriptsprachen beherrschen. Um ein Muster zu finden, verwenden Sie findstr. Um Zeichen zu ersetzen, verwenden Sie die Ersetzung mit (normale Variablen entweder in einem Sub oder in einem (Codeblock) mithilfe von delayedexpansion. LotPings vor 5 Jahren 0
Das Skript sucht in seinem Verzeichnis nach allen Dateien, die auf "gF" enden, und für eine solche Datei "totog.F" gibt es auch (aus Konstruktionsgründen möchte ich mein Skript ausführen) eine Homolog-Datei "toto" .f "; dann führt das Skript den Befehl "acommand" aus, auf den "ZECOM" zeigt: "ZECOM -someoption -f% FILE %% ~ nFILEg somelib.lib", das heißt: "acommand -someoption -f toto.f totog.F somelib .lib` wobei "someoption" eine bestimmte Option des Befehls "acommand" ist und wo die "somelib.lib" angibt, dass der Befehl ausgeführt werden soll, während eine Verknüpfung zur Bibliotheksdatei "somelib.lib" hergestellt wird. ujsgeyrr1f0d0d0r0h1h0j0j_juj vor 5 Jahren 0
Dies erzeugt eine Datei `toto.zecomextension64`. (`zecomextension64` ist die Erweiterung der erzeugten Dateien.) Dann gibt 'cacls` alle Rechte für alle erzeugten Dateien an. (Diese erzeugten Dateien werden von vielen verschiedenen Benutzern mit demselben Programm ausgeführt und gelesen, in dem sie alle in ihrer eigenen Sitzung ausgeführt werden.) ujsgeyrr1f0d0d0r0h1h0j0j_juj vor 5 Jahren 0
Basilly, ich habe `sed` unter Unix verwendet, um die String-Mappings` "totog.F" -> "toto.f" `und` "toto.f" -> "toto.zecomextension64" `zu erstellen. ujsgeyrr1f0d0d0r0h1h0j0j_juj vor 5 Jahren 0

1 Antwort auf die Frage

0
LotPings

Mein Versuch, die letzten beiden Befehle werden nur zum Test ausgegeben.

@Echo off & Setlocal EnableDelayedExpansion SET "ZECOM=C:\path\to\command\dothis.exe"  for %%F in (*g.F) do ( echo %%~nF SET "FILE=%%~nF" echo "%ZECOM%" -someoption -f "!%FILE:~0,-1!" "!FILE!" somelib.lib echo cacls "!FILE:.F=.ZECOM!" /g everyone:f ) 

Wenn die Ausgabe in Ordnung ist, entfernen Sie die echos

Sollte es "% FILE%" anstelle von "! FILE!" Sein? (Da dies einen Fehler auslöst.) Die `~ 0, -1` löst ebenfalls einen Fehler aus. ujsgeyrr1f0d0d0r0h1h0j0j_juj vor 5 Jahren 0
Nein, die `!` Sind korrekt, weil Sie delayedExpansion benötigen, wenn Sie ** AND ** setzen, um eine Variable innerhalb eines (Codeblocks) wiederzugeben. Ich habe einfach vergessen, es mit setlocal zu aktivieren, die Antwort wurde geändert. LotPings vor 5 Jahren 0