我有以下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
即:其中是命令的某些特定选项,并且表示在链接到库文件时要运行该命令。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
我的尝试,最后两个命令仅回显到测试输出。
@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
删除