2016-03-28 26 views
0

これは一種の質問ですが、私が見つけた質問のどれも私が探していることは全く答えていません。私はPowerShell(まったく新しいもの)を使って、ディレクトリ内のサブディレクトリを検索し、指定されたディレクトリにそれらを移動するスクリプトを作成しています。PowerShell - 任意のサブディレクトリとすべてのサブディレクトリを検索して移動する

私の問題は、次のコード内にある:

$Folders = C:\Users\temp 

$MoveFolders = Test-Path $Folders -PathType Container 

Write-Host $MoveFolders 
#I'm writing this with ISE, so I'm using write-host to view output for testing. 

私はに実行している問題は、このコードが実行されるたびに、それはフォルダがtempディレクトリ内が存在しない場合でも、trueを返すということです。私は想像できるすべての考えられる方法で試してみました。get-childitemを使ってどこでオブジェクトをパイプしてテストしましたが、サブディレクトリが存在する場合にのみ移動を実行します。

ユーザーが何らかの形でファイルまたはフォルダをこの特定のフォルダに追加すると、タスクスケジューラがスクリプトを実行するときに移動されます。

EDIT 私の質問をリダイレクトします。それは常に真実を返します。私が書いたものが一時フォルダ自体をテストすると指摘している人もいます。どのようなサブフォルダをテストしてboolean値として格納する方法がありますか?次に、移動プロセスを終了するif文に渡します。

+0

あなたは 'C:\ Users \ temp'ディレクトリの存在をテストしています。 'Get-ChildItem C:\ Users \ temp \ * |を試してみてください。 Where-Object {$ _。PsIsContainer} ' – beatcracker

+0

私は自分の質問自体に徹底的ではなかったと思う。私が本当にやりたかったのは、boolean値が格納されていて、それを変更するifステートメントに渡すというものでした。それは可能ですか? – user6111573

答えて

1

私はこれがあなたがしたいことだと思います。

#get the folders/subfolders from the directory 
    $folders = Get-ChildItem C:\Users\temp -Recurse -Directory 
    #loop through the folders 
    foreach($folder in $folders) {  
     #copy the the folder(s) and item(s) within to the destination 
     Copy-Item -Path $folder.FullName -Destination C:\test -Recurse 
    } 

あなたの質問を編集して以来、更新された回答です。

$items = Get-ChildItem -Path C:\Users\mkrouse\Desktop\test -Directory -Recurse 
#if items is equal to null, then there are no subfolders so assign the boolean to true 
if($items -eq $null) { 
    [bool]$NoSubfolders = $true; 
    } else { 
    [bool] $NoSubfolders = $false; 
    }   
+0

私はそれがあいまいであったことを認識しているので、私の質問を編集しました。謝罪します。私が実際にやろうとしていることは、サブフォルダの存在をテストし、ブール値として格納し、その値をさらにif文に使用することです。 – user6111573

+0

@ user6111573あなたが望むものに近い? – krousemw

+0

はい!ありがとうございました!私は少しそれを変更し、私は今それを持っていると思う。それでもテストしてください。テストパスを使って私が望むことをする方法はほとんどありません。あなたが提供したものを使って作業しました。それを感謝するトン!私は '$ MoveFolders = Get-ChildItem $ Folders -recurse | Where {$ _。PSIsContainer} if($ MoveFolders -ne $ Null){コード} ' – user6111573

0

あなたのコードは、 "c:\ users \ temp"がフォルダであるかどうかをテストします。これは常に真です。 "c:\ users \ temp"内のフォルダを探す必要があります。一つのアプローチは: ":\ユーザー\ TEMP C"

$Folders = "C:\temp" 
$MoveFolders = Get-ChildItem -Path $folders -Directory 
Write-Host $MoveFolders.Count 

$ MoveFolders今内のすべてのフォルダのリストが含まれています。これで、移動するフォルダの一覧が表示されます。

+0

あなたはどこに行くのか分かります。私はこのテストから返されたブール値を持つことができる方法はありますか? $ MoveFoldersをifステートメントに渡して、その値が真であればフォルダを移動することにしました。私はおそらくそれをovercomplicatingしています。 – user6111573

関連する問題