
我们在 Windows 10 和 Windows Server 2016/2019 上的 cmd 中使用 .cmd 批处理脚本,其中有一个“标头”,
- 将文件复制到 %Temp% 文件夹位置,然后
- 通过 UAC 提升提示请求管理权限。批处理文件从 %Temp% 文件夹运行后,它会
- 从 %Temp% 文件夹中删除自身,同时保留原始文件。
这一切都很好,除非有文件
- 文件名中的 &(与号)或
- @(at 符号),文件名中至少有一个空格。
但是,如果没有空格,@ 不会影响脚本。
我已经成功转义了以下字符,否则脚本将无法正常工作,例如
- (
- )
- ,
- ;
以下是该脚本的代码:
@echo off
Title %~n0
GoTo Begin
:End
::"Self-destruction" part that deletes batch file copy in %Temp% folder and confirms whether file was actually deleted.
Start /min cmd /c (@echo off^&Title "%~nx0" Temp Batch File Deletion^&echo [93mDeleting file "%Temp%\%~nx0" . . . [39m^&TimeOut 5 /NoBreak ^>nul 2^>^&1^&Del /a "%Temp%\%~nx0"^&ClS^&If Exist "%Temp%\%~nx0" ^(echo [91mFile "%Temp%\%~nx0" could not be deleted
这些文件名会产生问题:
- File&Name12345.cmd(文件名中至少有一个 & 符号)
- 文件@Name12345.cmd(至少一个@符号至少有一个空格)
有人知道如何在上面的脚本中正确地转义这些字符和任何其他字符吗?
可能有更简单的方法来创建这样的脚本,但是,高层出于某种原因只允许使用 cmd 和 PowerShell 来使用此脚本。他们也不想费心更改输入文件名,可能是出于临时的成本原因。
感谢您提供的帮助。