Windows(可选Cygwin):从命令行删除由另一个进程锁定的文件

时间:2015-01-15 15:04:17

标签: windows filelock

我想删除一个由另一个进程锁定的文件,从命令行(Windows 7)。

请注意,我知道这可能会造成各种各样的破坏,包括丢失所有数据并让Alan Turing在他的坟墓中旋转。在我的特殊情况下,我知道我在做什么,或者至少我愿意承担责任。

由于我已经安装了Cygwin,我的尝试是使用rm -rf,但是如果文件被锁定,这仍然不起作用(Permission Denied)。

我已经搜索了这个问题并找到了对免费工具(handler.exe和LockHunter)的建议,我愿意尝试一下。我只是想知道是否有更好的方法来做到这一点,特别是Cygwin中的某些工具,或者可能是Windows本身,是否允许我这样做。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您可以安装解锁器并从命令行使用它。 Unlocker是免费软件。 问候 Giova

答案 1 :(得分:1)

@zmechanic建议的

Sender ID可以包含在此脚本中以简化使用(指定部分文件名而不是PID)。

Settings - Cloud Messaging

演示(如果此脚本保存为handle):

#!/bin/bash
if [ $# -eq 0 ]; then
    cat >&2 <<EOF
Arguments to narrow handles expected.

Usage: $(basename "$0") HANDLE_ARG...
HANDLE_ARGs are passed to the handle command by Sysinternals
(https://technet.microsoft.com/sysinternals/handle) which must be in the path.
Example $(basename "$0") c:\\dir\\xy
EOF
    handle -h || true
    exit 4
fi

o=$(handle "$@" | perl -nle 'print "$1\t$2\t$3" if m{\bpid:\s*(\d+)\s+type:\s+\S+\s+([[:xdigit:]]+):\s(.*)}') || exit
echo "$o"
echo "Closing $(wc -l <<< "$o") handles..."
while read -r p h; do
    handle -c "$h" -p "$p" -y
done <<< "$o"

当需要通配时,应该在脚本之外完成:

closefilehandle

答案 2 :(得分:0)

在删除文件之前,您可以从命令行使用handle实用程序。见https://stackoverflow.com/a/10672497/1786034