我将以下行粘贴到 DOS PROMPT/DOS 命令行中:
del D:\myTempFolder\myTempFile.txt
效果很好——我能够删除文件myTempFile.txt'' inside the folder
myTempFolder''。我没有使用正斜杠,因为它与 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}