SED не существует для Windows 10 64bit, но?

435
ujsgeyrr1f0d0d0r0h1h0j0j_juj

У меня есть следующий скрипт Unix:

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 

что я хочу перевести в пакетный скрипт.

Я придумал:

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 ) 

но, конечно, это не работает, поскольку sedэто не распознанная команда ... Конечно, есть 32-битная версия sed для Windows, которая жалуется на отсутствие некоторых dll. Так, каковы были бы мои варианты / альтернативы в этой ситуации?

Некоторая справочная информация :

Скрипт ищет в своем каталоге все файлы, оканчивающиеся на «gF», и для любого такого файла totog.Fтакже есть (по построению, на данный момент я хочу запустить свой скрипт) файл гомолога toto.f; затем сценарий выполняет команду, acommandна которую ZECOMуказывает: ZECOM -someoption -f %FILE% %%~nFILEg somelib.libто есть: acommand -someoption -f toto.f totog.F somelib.libгде someoption- какая-то конкретная опция команды, acommandи где somelib.libуказывают, что команда должна быть выполнена при соединении с библиотечным файлом somelib.lib.

Это создает файл toto.zecomextension64. («zecomextension64» - это расширение созданных файлов.) Затем caclsвсе права предоставляются всем, для созданного файла. (Эти созданные файлы будут выполняться и считываться многими разными пользователями через одну и ту же программу, которую они все будут запускать в своем собственном сеансе.)

Basilly, я использовал sedна Unix, чтобы сделать сопоставления строк "totog.F" --> "toto.f"и "toto.f" --> "toto.zecomextension64".

-1
Для мета-переменных есть только одна буква, с четким регистром. Вы должны объяснить, что делает скрипт; в противном случае только люди, свободно владеющие обоими языками сценария, могли ответить Чтобы найти шаблон, используйте findstr, для замены символов используйте подстановку (обычные переменные в подпрограмме или внутри (блок кода) с использованием delayedexpansion. LotPings 5 лет назад 0
Скрипт ищет в своем каталоге все файлы, оканчивающиеся на `gF`, и для любого такого файла` totog.F` также есть (по построению, на данный момент я хочу запустить свой скрипт) файл гомологов `toto .f`; затем скрипт выполняет команду `acommand`, на которую` ZECOM` указывает: `ZECOM -someoption -f% FILE% %% ~ nFILEg somelib.lib`, то есть:` acommand -someoption -f toto.f totog.F somelib .lib`, где `someoption` - это какой-то конкретный параметр команды` acommand`, и где `somelib.lib` указывает, что команда должна выполняться при связывании с библиотечным файлом` somelib.lib`. ujsgeyrr1f0d0d0r0h1h0j0j_juj 5 лет назад 0
Это создает файл `toto.zecomextension64`. (`zecomextension64` является расширением созданных файлов.) Затем` cacls` предоставляет все права всем, для созданного файла. (Эти созданные файлы будут выполняться и считываться многими разными пользователями через одну и ту же программу, которую они все будут запускать в своем собственном сеансе.) ujsgeyrr1f0d0d0r0h1h0j0j_juj 5 лет назад 0
В общем, я использовал `sed` в unix для создания строковых отображений` "totog.F" -> "toto.f" `и` "toto.f" -> "toto.zecomextension64" `. ujsgeyrr1f0d0d0r0h1h0j0j_juj 5 лет назад 0

1 ответ на вопрос

0
LotPings

Моя попытка, последние две команды отображаются только для проверки вывода.

@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 ) 

Если вывод выглядит ОК Удалите echoсек

Должно ли это быть `% FILE%` вместо `"! FILE! "`? (Потому что это вызывает ошибку.) Кроме того, `~ 0, -1` вызывает ошибку. ujsgeyrr1f0d0d0r0h1h0j0j_juj 5 лет назад 0
Нет, `!` Верны, потому что вам нужно delayedExpansion при установке ** И **, отображая переменную внутри (кодовый блок). Я просто забыл включить его с помощью setlocal, ответ изменился. LotPings 5 лет назад 0