批处理如果定义不工作
Batch IF DEFINED Not Working
我正在尝试使用批处理从我的用户区自动删除某些文件夹。我已选择使用 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
)
)
请帮忙!
正如其他人在他们的评论中暗示的那样 - 你的逻辑是错误的。
您的每个 IF 语句都可以 return FALSE 只有一个特定的文件夹名称。因此,如果其中一个 IF 语句为假,您可以保证所有其他语句都为真。所以你想一想,很明显每次都会删除所有文件夹。
还有,你从来没有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"
我正在尝试使用批处理从我的用户区自动删除某些文件夹。我已选择使用 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
)
)
请帮忙!
正如其他人在他们的评论中暗示的那样 - 你的逻辑是错误的。
您的每个 IF 语句都可以 return FALSE 只有一个特定的文件夹名称。因此,如果其中一个 IF 语句为假,您可以保证所有其他语句都为真。所以你想一想,很明显每次都会删除所有文件夹。
还有,你从来没有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"