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

标签 scripting shell dos

我想转义 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/

相关文章:

c# - 使用 Cmd Prompt 将 DateTime 变量传递给控制台应用程序

windows - 如何从 forfiles 变量 fname 中删除引号

python - 正则表达式查找搜索词并将结果放入另一个数据文件中?

linux - 如何为BASH垃圾箱脚本添加选择?

javascript - 递归运行使用 XMLHttpRequest 下载的 JavaScript

Linux 命令行界面 : Extract variable number of lines from text file based on search

linux - Sed 删除每个以 .jsx 扩展名结尾的文件的第一行

javascript - 使用 AJAX 和跨站点脚本读取 header

android - 如何在一行中输入 adb shell 命令?

C ANSI 转义码