从桌面删除除.lnk之外的所有文件和目录

时间:2016-05-10 18:08:38

标签: windows batch-file cmd

我正在尝试编写一个脚本以便清除我的桌面。我想删除除快捷方式以外的所有文件和目录。我使用Windows 10.我的批处理代码如下:

@echo off
COLOR 0E
cd "C:/Users/DA/Desktop"
FORFILES /S /C "if @ext!=lnk del /F /Q /S"
rd /S /Q "."
pause
exit

也许这是一个愚蠢的错误,但我是Windows命令行中的新手。提前谢谢。

3 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

@echo off
COLOR 0E
CD /D "%userprofile%\Desktop"
Rem To delete folders
for /f "delims=" %%a in ('Dir /b /AD ^| find /v "lnk"') do echo rd /S /Q "%%a"
pause
Rem To Delete files
for /f "delims=" %%a in ('Dir /b ^| find /v "lnk"') do echo del /F /Q /S "%%a"
pause
exit

NB:当你的执行没问题时,只需摆脱echo命令

答案 1 :(得分:0)

您的代码中存在以下几个问题:

  1. 您必须在/C forfiles切换cmd /C后的命令行之前,因为您正在使用内部控制台命令(ifdel) 。如果省略cmd /Cforfiles会尝试查找名为if的程序文件,该文件不存在。
  2. !=语句没有比较运算符if。你的意思是不等于,所以你需要说明if not <expression1>==<expression2>
  3. @ext变量会扩展为用引号括起来的文件扩展名,因此您还需要在lnk周围说明它们。由于""位于forfiles /C后面的引用命令行中,因此您需要像\"一样转义它们,以便建立文字"字符。
  4. 您忘记在del命令中指定要删除的内容。
  5. /Sforfiles的开关del也意味着处理子目录中的项目,但我认为您不希望这样,因为您想要清理{ {1}}目录。
  6. Desktop命令,所以我假设您要删除rd中的所有目录。但是,Desktop尝试删除整个rd /S /Q "."目录(当您的批处理文件由Desktop更改为该目录时,该目录将失败)。我也会将cd命令放入rd命令行,因为有可能检查当前迭代的项目是文件还是目录(forfiles具有用于此目的的forfiles变量。)
  7. 只有在@isdir目录所在的同一驱动器中运行批处理文件时,cd命令才有效(除非您提供Desktop开关)。我会选择/D命令,暂时更改为pushd目录,直到有Desktop命令。
  8. 我不使用硬编码popd目录的位置,而是使用内置环境变量Desktop,它指向当前登录用户的用户配置文件目录,其中%USERPROFILE%目录位于。
  9. 不带Desktop开关的exit命令不仅会终止批处理文件,还会终止运行批处理文件的命令解释程序实例。运行批处理文件时无关紧要通过双击,但在命令提示符下执行它时,它确实很重要。
  10. 以下是经过纠正和改进的代码:

    /B

答案 2 :(得分:0)

您可以使用forif命令来完成此任务:

@echo off
COLOR 0E
cd C:/Users/DA/Desktop
for /d %x in (*) do @rd /s /q "%x"
for %i in (*) do if not %i == *.lnk del "%i"
pause

非常简单,效果很好。
确保%i和%x位于&#34;&#34;。