【问题标题】:How to delete all hardlinks of multiple files on windows 10?如何在 Windows 10 上删除多个文件的所有硬链接?
【发布时间】:2020-12-08 18:25:29
【问题描述】:

我每周都会创建很多硬链接。当需要清理它们时,我发现自己使用 ln (https://schinagl.priv.at/nt/ln/ln.html) 的“DeleteAllHardlinks.bat”,但我必须一个接一个地拖放每个文件。

我很想找到一种方法来选择 100 个文件并将它们放到 .bat 中,稍等片刻,然后找到所有这些文件和硬链接都已永久删除。无论如何要更改 .bat 文件以允许这样做吗? (或者可能有任何其他不同的方法来完成同样的事情?)

@echo off

REM
REM Check for commandline args
REM
if "[%~1]" == "[]" goto error

set LN=ln.exe

REM
REM List hardlink sibblings and delete all siblings
REM
for /f "delims=" %%a in ('@%LN% --list "%~1"') do (
  del /f "%%a"
)

goto ausmausraus

:error
echo DeleteAllHardlinks: Argument is missing. Usage DeleteAllHardlinks ^<filename^>
echo e.g. DeleteAllHardlinks c:\data\myfile.txt

:ausmausraus
echo on

提前致谢!

【问题讨论】:

  • @keiju ln.exe 不是在命令提示符窗口或引用的 Microsoft 文档页面中运行 help 时的标准 Windows command 输出。它也未列在SS64.com - A-Z index of Windows CMD commands 上,它具有所有 Windows 命令的最佳文档,包括 mklink 以创建目录符号链接、硬链接或目录连接。
  • @keiju dir /AL 可用于列出dir /? 描述的目录中的所有目录符号链接和目录连接。但是,可以很容易地修改批处理文件,以不仅支持第一个参数,还支持通过使用更多for 循环和%* 传递给批处理文件的所有文件名参数字符串,正如call /? 所解释的那样,即@987654333 @ 替换现有的 for 循环。但是启动 bat 的应用程序必须传递用双引号括起来的每个文件名才能正常工作。

标签: batch-file window delete-file hardlink ln


【解决方案1】:

非常感谢 Mofi!

批处理文件可以很容易地修改为不仅支持第一个参数,还支持通过使用for 循环和%* 传递给批处理文件的所有文件名参数字符串,正如call /? 所解释的那样,即使用作为现有 for 循环的替代品:

for %%I in (%*) do for /F "delims=" %%J in ('ln.exe --list "%%~I" 2^>nul') do del /F "%%~J"

但是启动批处理文件的应用程序必须传递用双引号括起来的每个文件名才能正常工作。

只需使用评论中提供的for 即可完美解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2020-11-09
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多