在 windows 10 64 位中使用 del /f 时访问被拒绝
Access is denied when use del /f in windows 10 64bit
我要删除 1.mp3,但出现错误 "Access is denied"。
有关文件权限的更多信息:
attrib 1.mp3
A C:\Users\Alipour\Desktop.mp3
我也用过attrib -s -h 1.mp3
但是
还是删除不了
del /f/s/q 1.mp3 > NUL
或
del /f/s/q 1.mp3
或
del /f 1.mp3
有几种方法可以删除这样的文件:
1. Process Explorer 如果文件正在使用中:
您可以使用 Windows Sysinternals 中的 ProcessExplorer 来识别哪个程序锁定了文件。下载并启动 ProcessExplorer 并转到 Find|Find Handle or DLL... Ctrl+F
并输入锁定文件的名称:1.mp3
.
ProcessExplorer 将向您显示由于访问文件而导致锁定的进程。如果你有进程杀死那个进程并删除文件。
MS Word 访问名为 LockedFile.docx:
的文件的示例
2。安全模式启动:
另一种可能性是启动到安全模式。在 Windows 8 之前的时代,这是通过在 Windows 启动之前按 F8 来完成的。
在 Windows 8 及更高版本中,您可以在 Windows 启动之前按 Shift+F8 或更轻松地按住 Shift 并在登录屏幕甚至 Windows 中单击重新启动。如果这太短,请查看 here 如何进入安全模式。
进入安全模式后,您可以再次尝试删除该文件。
3。通过 PendingFileRenameOperations 在 Windows 启动时删除文件:
使用 PendingFileRenameOperations,您可以在 Windows 启动过程中重命名甚至删除文件,而其他任何东西都无法访问和阻止该文件。
PendingFileRenameOperations 将输入 Windows 注册表并由成对的文件路径组成。
您可以按照下面的说明手动执行此操作,也可以使用名为 MoveFile 的 Windows Sysinternals 程序再次执行此操作。下载该程序并在控制台中使用它 window(开始 -> 运行 或 Windows-Key+R, 输入 cmd
并按 ENTER).
键入 movefile foo.exe ""
以在重新启动时删除文件。
通过注册表的手动方法:
第一个路径是要重命名的文件。
第二个路径是新的文件路径。
如果第二个路径为空 (0x0000),文件将被删除。
- 开始->运行或Windows-Key+R
- 输入
regedit
,然后按 ENTER
- 转到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
- 创建一个新的多字符串值:
PendingFileRenameOperations
- 输入
\??\filepath
作为数据(例如 \??\C:\Users\xyz\Desktop\foo.exe
)
- 按确定
- 右键单击该键,单击修改二进制数据
- 在十六进制字符串的末尾添加
0000
(4个零代表一个空字符串)
- 按确定
- 重新启动计算机
Lean and mean PendingFileRenameOperations:
的仅批处理文件替代方案
~ 脚本将添加一个条目以右键单击 -- "SendTo" 菜单
~ 接受单个参数,文件或文件夹
〜确认提示([取消]以清除以前的条目)
~ 基本的白痴校对(例如不要处理 %Windir%)
goto="Batch" /* Rename_On_Boot by AveYo v1
:RenOnBoot
set "input=%*" & call set "input=%%input:?=%%" &rem line below adds entry to right-click -- "SendTo" menu
if /i "_%~dp0"=="_%APPDATA%\Microsoft\Windows\SendTo\" (set .=) else copy /y "%~f0" "%APPDATA%\Microsoft\Windows\SendTo\" >nul 2>nul
if "_%1"=="_" color 4f & echo ERROR! No input provided & ping -n 6 localhost >nul & exit /b
for %%# in ("C:\" "C:\Boot" "C:\Recovery" "%WINDIR%" "%WINDIR%\system32" "%ProgramData%" "%ProgramFiles%" "%USERPROFILE%") do (
if /i "_%input%"=="_%%~#" color 4f & echo ERROR! %%# is not safe to delete & ping -n 6 localhost >nul & exit /b
)
color 0B & echo Please wait, folders might take a while .. & call cscript /nologo /e:JScript "%~f0" RenOnBoot "%input%" & exit /b
:RenOnBoot_Run_As_Admin
color 4f & echo Asking permission to run as Admin.. & call cscript /nologo /e:JScript "%~f0" RunAsAdmin "%~f1???" & exit /b
:"Batch"
@echo off & setlocal disabledelayedexpansion & mode 96,4 & echo. & title %~nx0 by AveYo & if not exist "%~f1" goto :RenOnBoot
reg query HKEY_USERS\S-1-5-20\Environment /v temp 1>nul 2>nul && goto :RenOnBoot || goto :RenOnBoot_Run_As_Admin
:"JScript" */
function RenOnBoot(f){
var HKLM=0x80000002, k='SYSTEM\CurrentControlSet\Control\Session Manager', v='PendingFileRenameOperations';
var reg=GetObject('winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv'), ws=WSH.CreateObject('WScript.Shell');
var confirmation=ws.Popup(" Rename on next boot? [OK]\n Clear previous entries? [Cancel]\n\n "+f,0,'Rename_On_Boot by AveYo',33);
if (confirmation == 2) { reg.DeleteValue(HKLM, k, v); WSH.quit(); } // Clear existing entries on Cancel press and quit script
var mtd=reg.Methods_('GetMultiStringValue').InParameters.SpawnInstance_(); mtd.hDefKey=HKLM; mtd.sSubKeyName=k; mtd.sValueName=v;
var query=reg.ExecMethod_('GetMultiStringValue', mtd), regvalue=(!query.ReturnValue) ? query.SValue.toArray():[,], entries=[];
var fso=new ActiveXObject('Scripting.FileSystemObject'), fn=fso.GetAbsolutePathName(f);
entries.push('\??\'+fn,'\??\'+fn+'.ren');
reg.CreateKey(HKLM, k); reg.SetMultiStringValue(HKLM, k, v, entries.concat(regvalue));
}
if (WSH.Arguments.length>=2 && WSH.Arguments(0)=='RenOnBoot') RenOnBoot(WSH.Arguments(1));
function RunAsAdmin(self, arguments) { WSH.CreateObject('Shell.Application').ShellExecute(self, arguments, '', 'runas', 1) }
if (WSH.Arguments.length>=1 && WSH.Arguments(0)=='RunAsAdmin') RunAsAdmin(WSH.ScriptFullName, WSH.Arguments(1));
//
goto="Batch" /* Delete_On_Boot by AveYo v1
:DelOnBoot
set "input=%*" & call set "input=%%input:?=%%" &rem line below adds entry to right-click -- "SendTo" menu
if /i "_%~dp0"=="_%APPDATA%\Microsoft\Windows\SendTo\" (set .=) else copy /y "%~f0" "%APPDATA%\Microsoft\Windows\SendTo\" >nul 2>nul
if "_%1"=="_" color 4f & echo ERROR! No input provided & ping -n 6 localhost >nul & exit /b
for %%# in ("C:\" "C:\Boot" "C:\Recovery" "%WINDIR%" "%WINDIR%\system32" "%ProgramData%" "%ProgramFiles%" "%USERPROFILE%") do (
if /i "_%input%"=="_%%~#" color 4f & echo ERROR! %%# is not safe to delete & ping -n 6 localhost >nul & exit /b
)
color 0B & echo Please wait, folders might take a while .. & call cscript /nologo /e:JScript "%~f0" DelOnBoot "%input%" & exit /b
:DelOnBoot_Run_As_Admin
color 4f & echo Asking permission to run as Admin.. & call cscript /nologo /e:JScript "%~f0" RunAsAdmin "%~f1???" & exit /b
:"Batch"
@echo off & setlocal disabledelayedexpansion & mode 96,4 & echo. & title %~nx0 by AveYo & if not exist "%~f1" goto :DelOnBoot
reg query HKEY_USERS\S-1-5-20\Environment /v temp 1>nul 2>nul && goto :DelOnBoot || goto :DelOnBoot_Run_As_Admin
:"JScript" */
function DelOnBoot(f){
ListDir=function(src, _root,_list) {
_root=_root || src, _list=_list || [];
var root=fso.GetFolder(src), files=new Enumerator(root.Files), dirs=new Enumerator(root.SubFolders);
while (!files.atEnd()) { _list.push(files.item()); files.moveNext(); }
while (!dirs.atEnd()) { _list=ListDir(dirs.item().path, _root,_list); _list.push(dirs.item()); dirs.moveNext(); }
return _list;
};
var HKLM=0x80000002, k='SYSTEM\CurrentControlSet\Control\Session Manager', v='PendingFileRenameOperations';
var reg=GetObject('winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv'), ws=WSH.CreateObject('WScript.Shell');
var confirmation=ws.Popup(" Delete on next boot? [OK]\n Clear previous entries? [Cancel]\n\n "+f,0,'Delete_On_Boot by AveYo',33);
if (confirmation == 2) { reg.DeleteValue(HKLM, k, v); WSH.quit(); } // Clear existing entries on Cancel press and quit script
var mtd=reg.Methods_('GetMultiStringValue').InParameters.SpawnInstance_(); mtd.hDefKey=HKLM; mtd.sSubKeyName=k; mtd.sValueName=v;
var query=reg.ExecMethod_('GetMultiStringValue', mtd), regvalue=(!query.ReturnValue) ? query.SValue.toArray():[,], entries=[];
var fso=new ActiveXObject('Scripting.FileSystemObject'), fn=fso.GetAbsolutePathName(f);
if (fso.FolderExists(fn)) { var list=ListDir(fn); for (var i in list) entries.push('\??\'+list[i],''); }
entries.push('\??\'+fn,'');
reg.CreateKey(HKLM, k); reg.SetMultiStringValue(HKLM, k, v, entries.concat(regvalue));
}
if (WSH.Arguments.length>=2 && WSH.Arguments(0)=='DelOnBoot') DelOnBoot(WSH.Arguments(1));
function RunAsAdmin(self, arguments) { WSH.CreateObject('Shell.Application').ShellExecute(self, arguments, '', 'runas', 1) }
if (WSH.Arguments.length>=1 && WSH.Arguments(0)=='RunAsAdmin') RunAsAdmin(WSH.ScriptFullName, WSH.Arguments(1));
//
您可以通过“Process Explorer → Find → Find handles or DLLs”找出哪个程序锁定了某个文件。
比如locker是explorer.exe
,Windows explorer,杀完[=就可以删除文件了23=] 资源管理器 在 任务管理器.
当del /f <FILE>
产生拒绝访问错误时,您需要首先使用takeown
和icacls
命令行获取所有者并授予访问权限实用程序,请查看示例:Delete a specific file on Windows.
我要删除 1.mp3,但出现错误 "Access is denied"。
有关文件权限的更多信息:
attrib 1.mp3
A C:\Users\Alipour\Desktop.mp3
我也用过attrib -s -h 1.mp3
但是
还是删除不了del /f/s/q 1.mp3 > NUL
或
del /f/s/q 1.mp3
或
del /f 1.mp3
有几种方法可以删除这样的文件:
1. Process Explorer 如果文件正在使用中:
您可以使用 Windows Sysinternals 中的 ProcessExplorer 来识别哪个程序锁定了文件。下载并启动 ProcessExplorer 并转到 Find|Find Handle or DLL... Ctrl+F
并输入锁定文件的名称:1.mp3
.
ProcessExplorer 将向您显示由于访问文件而导致锁定的进程。如果你有进程杀死那个进程并删除文件。
MS Word 访问名为 LockedFile.docx:
的文件的示例
2。安全模式启动:
另一种可能性是启动到安全模式。在 Windows 8 之前的时代,这是通过在 Windows 启动之前按 F8 来完成的。
在 Windows 8 及更高版本中,您可以在 Windows 启动之前按 Shift+F8 或更轻松地按住 Shift 并在登录屏幕甚至 Windows 中单击重新启动。如果这太短,请查看 here 如何进入安全模式。
进入安全模式后,您可以再次尝试删除该文件。
3。通过 PendingFileRenameOperations 在 Windows 启动时删除文件:
使用 PendingFileRenameOperations,您可以在 Windows 启动过程中重命名甚至删除文件,而其他任何东西都无法访问和阻止该文件。
PendingFileRenameOperations 将输入 Windows 注册表并由成对的文件路径组成。
您可以按照下面的说明手动执行此操作,也可以使用名为 MoveFile 的 Windows Sysinternals 程序再次执行此操作。下载该程序并在控制台中使用它 window(开始 -> 运行 或 Windows-Key+R, 输入 cmd
并按 ENTER).
键入 movefile foo.exe ""
以在重新启动时删除文件。
通过注册表的手动方法:
第一个路径是要重命名的文件。
第二个路径是新的文件路径。
如果第二个路径为空 (0x0000),文件将被删除。
- 开始->运行或Windows-Key+R
- 输入
regedit
,然后按 ENTER - 转到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
- 创建一个新的多字符串值:
PendingFileRenameOperations
- 输入
\??\filepath
作为数据(例如\??\C:\Users\xyz\Desktop\foo.exe
) - 按确定
- 右键单击该键,单击修改二进制数据
- 在十六进制字符串的末尾添加
0000
(4个零代表一个空字符串) - 按确定
- 重新启动计算机
Lean and mean PendingFileRenameOperations:
的仅批处理文件替代方案
~ 脚本将添加一个条目以右键单击 -- "SendTo" 菜单
~ 接受单个参数,文件或文件夹
〜确认提示([取消]以清除以前的条目)
~ 基本的白痴校对(例如不要处理 %Windir%)
goto="Batch" /* Rename_On_Boot by AveYo v1
:RenOnBoot
set "input=%*" & call set "input=%%input:?=%%" &rem line below adds entry to right-click -- "SendTo" menu
if /i "_%~dp0"=="_%APPDATA%\Microsoft\Windows\SendTo\" (set .=) else copy /y "%~f0" "%APPDATA%\Microsoft\Windows\SendTo\" >nul 2>nul
if "_%1"=="_" color 4f & echo ERROR! No input provided & ping -n 6 localhost >nul & exit /b
for %%# in ("C:\" "C:\Boot" "C:\Recovery" "%WINDIR%" "%WINDIR%\system32" "%ProgramData%" "%ProgramFiles%" "%USERPROFILE%") do (
if /i "_%input%"=="_%%~#" color 4f & echo ERROR! %%# is not safe to delete & ping -n 6 localhost >nul & exit /b
)
color 0B & echo Please wait, folders might take a while .. & call cscript /nologo /e:JScript "%~f0" RenOnBoot "%input%" & exit /b
:RenOnBoot_Run_As_Admin
color 4f & echo Asking permission to run as Admin.. & call cscript /nologo /e:JScript "%~f0" RunAsAdmin "%~f1???" & exit /b
:"Batch"
@echo off & setlocal disabledelayedexpansion & mode 96,4 & echo. & title %~nx0 by AveYo & if not exist "%~f1" goto :RenOnBoot
reg query HKEY_USERS\S-1-5-20\Environment /v temp 1>nul 2>nul && goto :RenOnBoot || goto :RenOnBoot_Run_As_Admin
:"JScript" */
function RenOnBoot(f){
var HKLM=0x80000002, k='SYSTEM\CurrentControlSet\Control\Session Manager', v='PendingFileRenameOperations';
var reg=GetObject('winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv'), ws=WSH.CreateObject('WScript.Shell');
var confirmation=ws.Popup(" Rename on next boot? [OK]\n Clear previous entries? [Cancel]\n\n "+f,0,'Rename_On_Boot by AveYo',33);
if (confirmation == 2) { reg.DeleteValue(HKLM, k, v); WSH.quit(); } // Clear existing entries on Cancel press and quit script
var mtd=reg.Methods_('GetMultiStringValue').InParameters.SpawnInstance_(); mtd.hDefKey=HKLM; mtd.sSubKeyName=k; mtd.sValueName=v;
var query=reg.ExecMethod_('GetMultiStringValue', mtd), regvalue=(!query.ReturnValue) ? query.SValue.toArray():[,], entries=[];
var fso=new ActiveXObject('Scripting.FileSystemObject'), fn=fso.GetAbsolutePathName(f);
entries.push('\??\'+fn,'\??\'+fn+'.ren');
reg.CreateKey(HKLM, k); reg.SetMultiStringValue(HKLM, k, v, entries.concat(regvalue));
}
if (WSH.Arguments.length>=2 && WSH.Arguments(0)=='RenOnBoot') RenOnBoot(WSH.Arguments(1));
function RunAsAdmin(self, arguments) { WSH.CreateObject('Shell.Application').ShellExecute(self, arguments, '', 'runas', 1) }
if (WSH.Arguments.length>=1 && WSH.Arguments(0)=='RunAsAdmin') RunAsAdmin(WSH.ScriptFullName, WSH.Arguments(1));
//
goto="Batch" /* Delete_On_Boot by AveYo v1
:DelOnBoot
set "input=%*" & call set "input=%%input:?=%%" &rem line below adds entry to right-click -- "SendTo" menu
if /i "_%~dp0"=="_%APPDATA%\Microsoft\Windows\SendTo\" (set .=) else copy /y "%~f0" "%APPDATA%\Microsoft\Windows\SendTo\" >nul 2>nul
if "_%1"=="_" color 4f & echo ERROR! No input provided & ping -n 6 localhost >nul & exit /b
for %%# in ("C:\" "C:\Boot" "C:\Recovery" "%WINDIR%" "%WINDIR%\system32" "%ProgramData%" "%ProgramFiles%" "%USERPROFILE%") do (
if /i "_%input%"=="_%%~#" color 4f & echo ERROR! %%# is not safe to delete & ping -n 6 localhost >nul & exit /b
)
color 0B & echo Please wait, folders might take a while .. & call cscript /nologo /e:JScript "%~f0" DelOnBoot "%input%" & exit /b
:DelOnBoot_Run_As_Admin
color 4f & echo Asking permission to run as Admin.. & call cscript /nologo /e:JScript "%~f0" RunAsAdmin "%~f1???" & exit /b
:"Batch"
@echo off & setlocal disabledelayedexpansion & mode 96,4 & echo. & title %~nx0 by AveYo & if not exist "%~f1" goto :DelOnBoot
reg query HKEY_USERS\S-1-5-20\Environment /v temp 1>nul 2>nul && goto :DelOnBoot || goto :DelOnBoot_Run_As_Admin
:"JScript" */
function DelOnBoot(f){
ListDir=function(src, _root,_list) {
_root=_root || src, _list=_list || [];
var root=fso.GetFolder(src), files=new Enumerator(root.Files), dirs=new Enumerator(root.SubFolders);
while (!files.atEnd()) { _list.push(files.item()); files.moveNext(); }
while (!dirs.atEnd()) { _list=ListDir(dirs.item().path, _root,_list); _list.push(dirs.item()); dirs.moveNext(); }
return _list;
};
var HKLM=0x80000002, k='SYSTEM\CurrentControlSet\Control\Session Manager', v='PendingFileRenameOperations';
var reg=GetObject('winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv'), ws=WSH.CreateObject('WScript.Shell');
var confirmation=ws.Popup(" Delete on next boot? [OK]\n Clear previous entries? [Cancel]\n\n "+f,0,'Delete_On_Boot by AveYo',33);
if (confirmation == 2) { reg.DeleteValue(HKLM, k, v); WSH.quit(); } // Clear existing entries on Cancel press and quit script
var mtd=reg.Methods_('GetMultiStringValue').InParameters.SpawnInstance_(); mtd.hDefKey=HKLM; mtd.sSubKeyName=k; mtd.sValueName=v;
var query=reg.ExecMethod_('GetMultiStringValue', mtd), regvalue=(!query.ReturnValue) ? query.SValue.toArray():[,], entries=[];
var fso=new ActiveXObject('Scripting.FileSystemObject'), fn=fso.GetAbsolutePathName(f);
if (fso.FolderExists(fn)) { var list=ListDir(fn); for (var i in list) entries.push('\??\'+list[i],''); }
entries.push('\??\'+fn,'');
reg.CreateKey(HKLM, k); reg.SetMultiStringValue(HKLM, k, v, entries.concat(regvalue));
}
if (WSH.Arguments.length>=2 && WSH.Arguments(0)=='DelOnBoot') DelOnBoot(WSH.Arguments(1));
function RunAsAdmin(self, arguments) { WSH.CreateObject('Shell.Application').ShellExecute(self, arguments, '', 'runas', 1) }
if (WSH.Arguments.length>=1 && WSH.Arguments(0)=='RunAsAdmin') RunAsAdmin(WSH.ScriptFullName, WSH.Arguments(1));
//
您可以通过“Process Explorer → Find → Find handles or DLLs”找出哪个程序锁定了某个文件。
比如locker是explorer.exe
,Windows explorer,杀完[=就可以删除文件了23=] 资源管理器 在 任务管理器.
当del /f <FILE>
产生拒绝访问错误时,您需要首先使用takeown
和icacls
命令行获取所有者并授予访问权限实用程序,请查看示例:Delete a specific file on Windows.