web-dev-qa-db-fra.com

L'accès est refusé lorsque del/f est utilisé dans Windows 10 64 bits

Je vais supprimer 1.mp3 mais cela me donne l'erreur "Accès refusé".

Plus d'informations sur les permanentes de fichiers:

attrib 1.mp3
A   C:\Users\Alipour\Desktop\1\1.mp3

J'ai aussi utilisé attrib -s -h 1.mp3

mais il ne peut toujours pas être supprimé par

del /f/s/q 1.mp3 > NUL

ou

del /f/s/q 1.mp3

ou

del /f 1.mp3
3
Mohammad Alipour

Il existe plusieurs méthodes pour supprimer un tel fichier:

1. Process Explorer si le fichier est en cours d'utilisation:
Vous pouvez utiliser ProcessExplorer à partir de Windows Sysinternals pour identifier le programme qui verrouille le fichier. Téléchargez et démarrez ProcessExplorer, accédez à Find|Find Handle or DLL... Ctrl+F et entrez le nom du fichier verrouillé: 1.mp3.

ProcessExplorer vous montrera le processus responsable du verrouillage en raison de l'accès au fichier. Si vous avez le processus, tuez-le et supprimez le fichier.

Exemple avec MS Word accédant à un fichier appelé LockedFile.docx :
ProcessExplorerExample


2. Démarrage en mode sans échec:
Une autre possibilité consiste à démarrer en mode sans échec. Avant Windows 8, cela était fait en appuyant sur F8 avant le démarrage de Windows.
Sous Windows 8 et supérieur, vous pouvez appuyer sur Shift+F8 avant que Windows ne démarre ou plus facilement, vous pouvez tenir Shift et cliquez sur Redémarrer dans l'écran de connexion ou même dans Windows. Si cela était trop court, regardez ici comment entrer en mode sans échec.

Une fois que vous êtes en mode sans échec, vous pouvez réessayer de supprimer ce fichier.


3. Supprimer le fichier au démarrage de Windows via PendingFileRenameOperations:
Avec PendingFileRenameOperations, vous pouvez renommer et même supprimer un fichier à la procédure de démarrage Windows lorsque rien d’autre ne peut accéder à ce fichier et le bloquer. PendingFileRenameOperations sera entré dans le registre Windows et consiste en des paires de chemins de fichiers.

Vous pouvez le faire manuellement comme décrit ci-dessous ou à nouveau avec un programme Windows Sysinternals appelé MoveFile . Téléchargez ce programme et utilisez-le dans une fenêtre de la console (Démarrer -> Exécuter ou Windows-Key+R, tapez cmd et appuyez sur ENTER).
Tapez movefile foo.exe "" pour supprimer un fichier au redémarrage.

Méthode manuelle via registre:
Le 1er chemin est le fichier à renommer.
Le 2ème chemin est le nouveau chemin de fichier. Si le deuxième chemin est vide (0x0000), le fichier est supprimé.

  1. Démarrer -> Exécuter ou Windows-Key+R
  2. Saisissez regedit et appuyez sur ENTER
  3. Goto HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  4. Créez une nouvelle valeur multi-chaîne : PendingFileRenameOperations
  5. Entrez \??\filepath en tant que données (par exemple \??\C:\Users\xyz\Desktop\foo.exe)
  6. Appuyer sur OK
  7. Cliquez avec le bouton droit sur la clé, cliquez sur Modifier les données binaires
  8. À la fin de la chaîne hexadécimale, ajoutez 0000 (4 zéros qui représentent une chaîne vide).
  9. Appuyer sur OK
  10. Redémarrez votre ordinateur
6
Andre Kampling

Lean and mean} Alternatives alternatives au fichier de commandes uniquement pour PendingFileRenameOperations :
~ Les scripts ajouteront une entrée pour cliquer avec le bouton droit de la souris sur le menu "Envoyer à"
~ Accepter un seul paramètre, Fichier ou Dossier
~ Invite de confirmation ([Annuler] pour effacer les entrées précédentes)
~ Imperméabilisation de base des idiots (ne traitez pas% Windir% par exemple)

Rename_On_Boot.bat

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));
//

Delete_On_Boot.bat

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));
//
0
AveYo