使用 del 命令转义 \immediate\write18 内的反斜杠

使用 del 命令转义 \immediate\write18 内的反斜杠

我将以下行粘贴到 DOS PROMPT/DOS 命令行中:

del D:\myTempFolder\myTempFile.txt

效果很好——我能够删除文件myTempFile.txt'' inside the foldermyTempFolder''。我没有使用正斜杠,因为它与 del 命令关联时具有不同的含义(开关)。

我想知道是否可以在 LaTeX 文件中实现上述例程,因此我尝试了以下操作:

\documentclass{article}%
\newcommand*{\myFolderName}{myTempFolder}
\newcommand*{\myFileName}{myTempFile.txt}
\begin{document}
\immediate\write18{del D:\textbackslash\myFolderName\textbackslash\myFileName}%
\end{document}

文件“myTempFile.txt”未被删除。请问我的错误在哪里?我认为问题出在用 del 命令转义 \immediate\write18 中的反斜杠。

感谢您的任何帮助。

答案1

您可以使用

\@backslashchar 如同

\makeatletter
\immediate\write18{del D:\@backslashchar myFolderName\@backslashchar myFileName}%
\makeatother

\myFolderName或者更简单地避免通过使用扩展未定义的标记\string

\immediate\write18{del D:\string\myFolderName\string\myFileName}%

答案2

我喜欢找到的解决方案这里,在这种情况下需要添加以下内容:

\makeatletter
\newcommand\dosystem{%
  \@ifstar{\@tempswafalse\do@system}{\@tempswatrue\do@system}%
}
\edef\@hashmark{\string#}\edef\@lbrace{\string{}\edef\@rbrace{\string}}
\newcommand\do@system[1]{%
  \begingroup
  \let\\\@backslashchar
  \let\%\@percentchar
  \let\#\@hashmark
  \let\{\@lbrace
  \let\}\@rbrace
  \if@tempswa\expandafter\immediate\fi
  \write18{#1}%
  \endgroup
}

然后像

\dosystem{del D:\\myFolderName\\myFileName}

相关内容