【问题标题】:Batch IF DEFINED Not Working如果定义的批处理不起作用
【发布时间】:2015-03-07 02:53:17
【问题描述】:

我正在尝试使用批处理自动从我的用户区域中删除某些文件夹。我已选择使用if defined 技巧过滤所有应删除的文件夹。

但是,以下代码只是删除所有文件夹。

for /f "usebackq delims=|" %%f in (`dir /b /ad`) do (
    set "true="
    if not "%%f"=="Custom Office Templates"     set true=1
    if not "%%f"=="Desktop"                     set true=1
    if not "%%f"=="Downloads"                   set true=1
    if not "%%f"=="Favourites"                  set true=1
    if not "%%f"=="Links"                       set true=1
    if not "%%f"=="My Documents"                set true=1
    if not "%%f"=="My Music"                    set true=1
    if not "%%f"=="My Pictures"                 set true=1
    if not "%%f"=="My Videos"                   set true=1
    if defined true (
        rd %%f
    )
)

请帮忙!

【问题讨论】:

  • 请说明您所说的“不工作”是什么意思。如所写,您的代码将删除 every 目录。如果它正在这样做,那么您的代码正在“工作”。
  • Hm - 每个目录都设置为“1”...
  • 您要删除列出的目录还是全部删除?

标签: batch-file command-line windows-7 command-prompt


【解决方案1】:

正如其他人对他们的 cmets 所暗示的那样 - 你的逻辑是错误的。

您的每个 IF 语句只能为一个特定的文件夹名称返回 FALSE。因此,如果其中一个 IF 语句为假,您可以保证所有其他语句都为 TRUE。所以你想一想,很明显每次都会删除所有文件夹。

另外,你永远不会 undefined TRUE。因此,一旦为一个文件夹设置了它,它将为所有其他文件夹保持设置。

如果您只想删除列出的文件夹,那么:

for %%A in (
  "Custom Office Templates"
  "Desktop"                
  "Downloads"              
  "Favourites"             
  "Links"                  
  "My Documents"           
  "My Music"               
  "My Pictures"            
  "My Videos"              
) do rd %%A

如果您想删除所有现有文件夹除了列出的文件夹,那么

for /d %%A in (*) do (
  set "exclude="
  for %%B in (
    "Custom Office Templates"
    "Desktop"                
    "Downloads"              
    "Favourites"             
    "Links"                  
    "My Documents"           
    "My Music"               
    "My Pictures"            
    "My Videos"              
  ) do if /i "%%A" equ "%%~B" set exclude=1
  if not defined exclude rd "%%A"
)

请注意,如果文件夹不为空,RD 将失败。如果您使用,您可以通过删除文件夹中的所有内容来强制它成功

rd /s /q "%%A"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2021-04-24
    • 1970-01-01
    • 2011-08-03
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多