Sed 不存在于 Windows 10 64 位系统中,但是?

Sed 不存在于 Windows 10 64 位系统中,但是?

我有以下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这不是可识别的命令...当然,有一个适用于 Windows 的 32 位 gnu 版本的 sed,它抱怨缺少某些 dll。那么在这种情况下我的选择/替代方案是什么?

一些背景信息

该脚本在其目录中查找所有以“gF”结尾的文件,并且对于任何这样的文件,totog.F也存在(通过构造,此刻我想要运行我的脚本)同源文件toto.f;然后脚本执行指向的命令:acommand即:其中是命令的某些特定选项,并且表示在链接到库文件时要运行该命令。ZECOMZECOM -someoption -f %FILE% %%~nFILEg somelib.libacommand -someoption -f toto.f totog.F somelib.libsomeoptionacommandsomelib.libsomelib.lib

这将生成一个文件toto.zecomextension64。(“zecomextension64”是生成的文件的扩展名。)然后将cacls生成的文件的所有权限授予所有人。(这些生成的文件将由许多不同的用户通过同一个程序执行和读取,它们都将在自己的会话中运行。)

Basilly,我sed在 unix 上使用它来制作字符串映射"totog.F" --> "toto.f""toto.f" --> "toto.zecomextension64"

答案1

我的尝试,最后两个命令仅回显到测试输出。

@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删除

相关内容