2016-08-25 9 views
0

ディレクトリを削除したいが、プロセスがそれを使用している。Powershellのfuser相当ですか?

mv : Access to the path 'C:\Users\mike\Documents\myapp\node_modules\' is denied. 

エクスプローラには、使用中のディレクトリが記載されています。 fuserと同等のWindows Powershellはありますか?

これはパワーシェルの質問です。私はGUIアプリケーションを起動したくありません。

答えて

1

は、この方法を試してください。

$lockedFolder="C:\Windows\System32" 
Get-Process | %{$processVar = $_;$_.Modules | %{if($_.FileName -like "$lockedFolder*"){$processVar.Name + " PID:" + $processVar.id}}} 

これは、フォルダ内の実行中のすべてのプロセスを探します。 (またはサブディレクトリ内)

このスクリプトでは、あなたはいくつかのより多くの情報を得るでしょう:

$lockedFolder="C:\Windows\System32" 
Get-Process | %{$processVar = $_;$_.Modules | %{if($_.FileName -like "$lockedFolder*"){$processVar.Name + " PID:" + $processVar.id + " FullName: " + $_.FileName }}} 

を私は、定着器に相当するものがないと思うが、しなければならhandle.exeと呼ばれるツールがあります最初にインストールされます。

PowerShell script to check an application that's locking a file?

+0

ありがとう!私はこれがフルパスで動作するように見えます - 相対的なフォルダ名で動作させる方法はありますか? – mikemaccana

+0

あなたは大歓迎です:) いいえ、フルパスではありません。スクリプトは、指定されたディレクトリまたはサブディレクトリで実行されているすべてのプロセスを取得します。したがって、 "D:\"をvar $ lockedFolderに設定すると、ディレクトリD:¥またはサブディレクトリで実行されているすべてのプロセスが取得されます。試してみてください: '$ lockedFolder =" C:\ Windows \ System32 " Get-Process | %{$ processVar = $ _; $ _。モジュール| %$ {$ processVar.Name + "PID:" + $ processVar.id + "FullName:" + $ processVar.FileName}}} ' –

+0

ああ、私は間違いです: '$ lockedFolder =" C:\ Windows \ System32 "Get-Process | %{$ processVar = $ _; $ _。モジュール| + $ processVar.id + "FullName:" + $ _。FileName}}} ' –

0

ここで相対ファイルを処理する@ Eldo.Obの優れた答えの修正版です。使用の際に

function fuser($relativeFile){ 
    $file = Resolve-Path $relativeFile 
    foreach ($Process in (Get-Process)) { 
    foreach ($Module in $Process.Modules) { 
     if ($Module.FileName -like "$file*") { 
     $Process | select id, path 
     } 
    } 
    } 
} 

:Eldo.Ob @

> fuser .\node_modules\ 

    Id Path 
    -- ---- 
2660 C:\Program Files\nodejs\node.exe