我正在尝试列出特定目录中的非符号链接,然后将其删除。
您的代码存在一些问题。
for /f %%a in ('dir /b %some_dir%') do (
dir /b
不起作用,因为它不返回具有完整路径的文件名(这是 的输入所必需的fsutil
)
改为使用dir /b /s
。
set count=fsutil hardlink list %%a | find /c /v ""
这并没有将计数设置为任何明智的事情。
使用另一个for /f
并解析输出,fsutil
以便您可以设置变量。
if %count% -EQU 1 del /Q %%a
这有两个错误。您需要使用延迟扩展来count
正确评估。替换%count%
为!count!
。同时删除-
. 替换-EQU
为EQU
。
尝试以下批处理文件。
测试.cmd:
@echo off
setlocal enabledelayedexpansion
set some_dir=C:\TEMP\
for /f %%a in ('dir /b /s %some_dir%') do (
for /f %%b in ('fsutil hardlink list %%a ^| find /c /v ""') do (
set count=%%b
if !count! EQU 1 echo del /Q %%a
)
)
endlocal
笔记:
示例用法和输出:
我已经用作f:\test\folder1
我的测试目录。hard
是一个硬链接1.txt
。
F:\test>dir f:\test\folder1
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of f:\test\folder1
29/08/2016 21:40 <DIR> .
29/08/2016 21:40 <DIR> ..
21/08/2016 09:46 0 1.txt
21/08/2016 09:46 0 2.txt
21/08/2016 09:46 0 3.txt
21/08/2016 09:46 0 4.txt
21/08/2016 09:46 0 5.txt
29/08/2016 21:38 <SYMLINK> file [f:\d]
21/08/2016 09:46 0 hard
29/08/2016 21:38 <SYMLINKD> test [f:\d]
7 File(s) 0 bytes
3 Dir(s) 1,764,846,960,640 bytes free
F:\test>test
del /Q f:\test\folder1\2.txt
del /Q f:\test\folder1\3.txt
del /Q f:\test\folder1\4.txt
del /Q f:\test\folder1\5.txt
del /Q f:\test\folder1\file
del /Q f:\test\folder1\test
延伸阅读