【问题标题】:IF multiple conditionsIF 多个条件
【发布时间】:2019-07-05 11:51:49
【问题描述】:

F.e.用户桌面上有一些文件夹。我想删除此文件夹中除快捷方式之外的所有文件。有两种类型的快捷方式 - 一些本地\网络资源和一些网站的快捷方式。

“某些本地\网络资源的快捷方式”具有 .lnk 扩展名

“某些网站的快捷方式”具有 .url 扩展名

我有already found这个任务怎么单独做

forfiles /p "%userprofile%\Desktop\folder" /s /m *.* /c "cmd /c for %G in (@path) do @if /I [%~xG] neq [.lnk] del /F /Q %G"

forfiles /p "%userprofile%\Desktop\folder" /s /m *.* /c "cmd /c for %G in (@path) do @if /I [%~xG] neq [.url] del /F /Q %G"

但是如何将这些条件组合成一个字符串呢?类似if /I [%~xG] neq [.lnk] AND [.lnk] ...

【问题讨论】:

  • if /I "%~xG" neq [.lnk] if /I "%~xG" neq [.url] ...
  • (虽然一些纯粹主义者会注意到你不应该使用字符串来使用neq,而是使用if not ... == ... - 两者都可以正常工作)
  • 我还会在cmd /C 之后和任何其他命令之前添加of @isdir == FALSE...

标签: windows batch-file cmd forfiles


【解决方案1】:

绝对没有必要在您的 /C 命令中使用

尝试任何一个;

ForFiles /P "%UserProfile%\Desktop\folder" /S /C "Cmd /C If /I Not @ext==\"lnk\" If /I Not @ext==\"url\" Del /A /F @path"

或使用帮助信息中显示的十六进制代码,可在命令提示符处输入 forfiles /?

ForFiles /P "%UserProfile%\Desktop\folder" /S /C "Cmd /C If /I Not @ext==0x22lnk0x22 If /I Not @ext==0x22url0x22" Del /A /F @path"

【讨论】:

  • /Q 改为 /A 用于确认抑制 我无法编辑您的评论,因为“编辑必须至少为 6 个字符;这篇文章还有其他需要改进的地方吗?” :-)
  • @Dmitry 我没有将正确命令更改为另一个不正确命令的习惯。打开命令提示符窗口并阅读命令的帮助信息,del /?erase /?help delhelp erase。您会注意到/Q 选项仅在使用通配符删除一个或多个文件时使用。您没有使用通配符,而是使用完全限定的文件名。 /A 选项用于选择例如只读文件,(您已经使用/F 选项删除只读文件)。如果没有属性,/A 选项会选择全部,即RSHAIL
猜你喜欢
  • 2013-09-29
  • 2016-01-20
  • 2015-02-07
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多