gpt4 book ai didi

scripting - DOS 文件名转义以与 *nix 命令一起使用

转载 作者:行者123 更新时间:2023-12-02 23:06:08 26 4
gpt4 key购买 nike

我想转义 DOS 文件名,以便可以将其与 sed 一起使用。我有一个类似这样的 DOS 批处理文件:

set FILENAME=%~f1

sed 's/Some Pattern/%FILENAME%/' inputfile

(注意:%~f1 - 将 %1 扩展为完全限定路径名 - C:\utils\MyFile.txt)

我发现%FILENAME%中的反斜杠只是转义了下一个字母。

我怎样才能将它们加倍以便它们逃脱?

(我安装了 cygwin,因此可以随意使用任何其他 *nix 命令)

解决方案

结合 Jeremy 和 Alexandru Nedelcu 的建议,并使用 |对于 sed 命令中的分隔符,我有

set FILENAME=%~f1
cygpath "s|Some Pattern|%FILENAME%|" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp

最佳答案

这会起作用。这很困惑,因为在 BAT 文件中你不能像在 Unix 中那样使用 set var=`cmd` 。echo 不理解引号的事实也很困惑,如果 Some Pattern 包含 shell 元字符,则可能会导致麻烦。

set FILENAME=%~f1
echo s/Some Pattern/%FILENAME%/ | sed -e "s/\\/\\\\/g" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp

[已编辑]:我很惊讶它对你不起作用。我刚刚测试了它,它在我的机器上运行。我正在使用 http://sourceforge.net/projects/unxutils 中的 sed并使用 cmd.exe 在 bat 文件中运行这些命令。

关于scripting - DOS 文件名转义以与 *nix 命令一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com