Windows 7 确保文件不存在

Windows 7 确保文件不存在,windows-7,cmd,Windows 7,Cmd,我见过这样做是为了确保文件不存在,而不会导致错误: FOR %%F IN (myfile) DO del %%F 我可以看出它比更常见的IF-EXISTS方法有优势,因为它只有一个文件名实例 但是对于不熟悉的读者来说,FOR的使用会分散他们的注意力 是否有一种不那么分散注意力的方法仍然只需要一次引用?一种可供选择的、可读的、只需要一次引用真实文件的方法 set "file=c:\somewhere\file.txt" if exist "%file%" del "%file%" 以及问题中的

我见过这样做是为了确保文件不存在,而不会导致错误:

FOR %%F IN (myfile) DO del %%F
我可以看出它比更常见的IF-EXISTS方法有优势,因为它只有一个文件名实例

但是对于不熟悉的读者来说,FOR的使用会分散他们的注意力


是否有一种不那么分散注意力的方法仍然只需要一次引用?

一种可供选择的、可读的、只需要一次引用真实文件的方法

set "file=c:\somewhere\file.txt"
if exist "%file%" del "%file%"
以及问题中的代码

FOR %%F IN (myfile) DO del %%F

除非myfile包含通配符,否则不确保任何内容。如果
for
命令中的文件搜索过程确定存在多个文件,则仅迭代现有文件,但不使用通配符,则
for
命令将执行
do
子句中的代码,在这种情况下,它将始终尝试删除该文件。

如果只想使用代码,则“不熟悉的读者”很容易理解-你想停在哪里?即使是
dir
(最终带有参数)对“非程序员”来说也可能是一个挑战。要解释你的代码,你可以使用
REM
@Stephan,“你想停在哪里?”?“Before dir:)是否只抑制错误消息:
del/q myfile 2>nul
?t抑制/all/error消息。是的,因为任何错误消息都会分散不熟悉的读者的注意力;)用
>error.txt
代替
>nul
怎么样?谢谢。注意:考虑到使用全局“文件”,我认为该解决方案需要多行代码才能使其与原始版本一样安全。“问题中的代码……除非myfile包含通配符,否则无法确保任何内容。”它在此处工作:。我错过了什么?@ChrisJJ,正如它所写的,这比原始代码更“安全”。这仅删除文件(如果存在)。我不太理解这里的“全局”术语,因为每个进程都有自己的环境变量副本。对于您的代码,您是否尝试在文件不存在时执行相同的代码?“这比原始代码更“安全”。这只会在文件存在时删除该文件。”当然,原始代码也是如此?我不太理解脚本中的“全局”术语“全局范围”。“对于您的代码,您是否尝试在文件不存在时执行相同的代码?”确定:。这有问题吗?@ChrisJJ,似乎我们都在谈论同一个概念的不同含义。如果上一次捕获中显示的行为是可接受的(del操作中的错误),为什么在原始问题中使用“…而不导致错误:”呢。为什么不仅仅是一个
delmyfile
,而没有
for
?如果
myfile
中没有通配符,则始终执行
del
命令。对于
%file%
变量,使用全局变量不会降低代码的安全性,如果您在其他地方使用该变量,它可能会在代码的其他部分产生副作用,但对于这部分代码,它没有什么区别。谢谢。现在我明白你的意思了。对于不存在(非通配符)文件的情况,FOR和DEL解决方案在输出消息和不设置errorlevel方面是相同的。“使用全局变量…可能会对代码的其他部分产生副作用”同意:)