2017-03-20 99 views
1

PSフォームをボタンで実行しています。ボタンを押すといくつかのものが実行され、モジュールが呼び出されます。モジュールを使用して、D:\ FolderName01 \ MyFolderNameからD:\ FolderName02にフォルダを移動する必要があります。Powershellの移動項目アクセスが拒否されました

私は管理者としてログインしています。サーバー2012-R2

コードはNOTボタンを押して起動すると自動スクリプトが実行されます。

DOES私はコードを編集しているときに問題なく実行し、強調表示して "Run Selection"を使用します。

これは文字通りモジュール全体です。他に何もされていません。

コード:

function MoveTheFolder($VariableName){ 

    if (-not (Test-Path "D:\FolderName02")) { 
     md "D:\FolderName02"} 

    cd -Path d:\ 
    Move-Item -Path "D:\FolderName01\$VariableName" -Destination "D:\FolderName02" -Force 

} 

FolderName02は問題なく作成されます。 $ VariableNameはモジュールに渡され、ブレークポイント分析と実際のエラーメッセージに基づいて正しいです。元のパスはDVDドライブです(F:.isoファイル)。与えられた

エラーは、私は、Windowsエクスプローラを使用して手動でフォルダを移動することができますので、彼らが開いているアプリケーションと提携することは表示されません

move-item: Access to the path '[D:\FolderName01\$VariableName]' is denied. 

です。

+0

は、UACが有効な場合、スクリプトは「管理者として実行」されていますか?コンソールまたはメッセージボックスに変数を指定してパスを書き込んで、そのパスが正しく処理されるようにすることはできますか? – ssaviers

+0

好奇心をそそらずに、 'move-item'の代わりに' COPY'を使うと、ディレクトリはコピー先にコピーされますか? – Nate

+0

@TessellatingHeckler彼はDVDから移動していません。 DVDはF:\ではなくD:\です。 – Nate

答えて

1

PowerShell 2.0コピーする前にディレクトリを作成する必要があります。

PowerShell 3.0では、Move-ItemまたはCopy-Itemによって作成されるため、作成する必要はありません。

ファイルを取得する限り。スイッチ-Recurseを使用してGet-ChildItemを使用できます。これは、サブフォルダに含まれる最初のディレクトリのすべてのファイルを取得するためです。ファイルとフォルダを取得したら、-ForceというオプションでMove-Itemにパイプします。 Move-Itemはファイルを新しいディレクトリに移動します。これがあなたが望むものなら、Copy-Itemを使用する必要があります。また、デバッグ用に-Verboseスイッチを追加しました。どのファイルが動作していないのかをお知らせください。

Function MoveTheFolder($VariableName){ 
if (-not (Test-Path "D:\FolderName02")) {New-Item "D:\FolderName02\$VariableName" -Type Directory} 
     cd D:\ #You do not need this, but its ok. 
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Move-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose 
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Copy-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose 
     } 

これが機能するかどうかを教えてください。

+0

D:\ Folder02が存在しない場合は作成しませんでしたので、そこにチェックインする必要があります。残りの作品は、まだ正しくはありません。 $ VariableName内のファイルは、それぞれのサブフォルダから取得され、D:\ Folder02 \ $ VariableNameのルートに配置されます。 $ VariableNameフォルダ全体をFolder01からFolder02に移動する必要があります。そして、Folder01には移動してはならない他の多くのフォルダがあります。 – JoeBlow

+0

これは私のせいで、PowerShell V2.0ではうまく動作しなかったことは知らなかった。私の理解は今、フォルダFolder1には多くのサブフォルダがあるということです。 $ VariableNameと等しいディレクトリだけが必要です。次に、FolderName02にファイルを別のfoldername $ VariableNameに配置します。私はコードを更新しました。 –

1

だから、Zachの解法は、完全には正しいとはいえませんが、実際の解答につながりました。

Function MoveTheFolder($VariableName){ 
    if (-not (Test-Path "D:\FolderName02")) { 
     New-Item "D:\FolderName02\$VariableName" -Type Directory 
    } 
    Get-ChildItem -Path "D:\FolderName01\$VariableName\" | Move-Item -Destination "D:\FolderName02\$VariableName" -Force 
    Remove-Item -Path "D:\Folder01\$VariableName" -Force 
} 

は私が望むすべてはフォルダ名、その中のファイルを列挙する必要はありませんですので、ワイルドカードシニフィアンを取り除くと-recurseガット:ここで作業コードです。

関連する問題