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