2017-05-16 9 views
-3

ファイルパスをテキストファイルに記録する目的で、Get-ChildItemを使用してディレクトリをナビゲートしています。しかし、私は特定のフォルダにいるかどうかに基づいて動的にテキストファイルを作成したいと思います。たとえば、のは、これが私のファイル構造であるとしましょう:PowerShellスクリプト内の場所を動的に知る方法

+--Root 
    +--LaunchFromHere 
     +--File1 
     +--file_I_want1.doc 
     +--File2 
     +--file_I_want2.doc 

私のスクリプトがLaunchFromHereで起動した場合、私は最終的にfile_I_want.doc年代に到着し、再帰的にファイル1とファイル2を通過します。しかし、ファイルパスを別の.txtファイルに記録したいのですが、それぞれのファイル名はファイル名で記録されています。したがって、file_I_want1.docが見つかると、ファイルパスはFile1.txtというテキストファイルに記録されます。

ここに私の問題です:私は現在、スクリプト内のファイルのファイル名を取得する方法を見つけることができません。

サイトに類似した質問に基づいて、これは私のコードです:

$invocation = (Get-Variable MyInvocation).Value 
$directorypath = Split-Path $invocation.MyCommand.Path 
$file_title = $directorypath.split('\')[-1]  

Get-ChildItem -include *.doc, -recurse | Select -Expand FullName | 
     ForEach-Object { 
      $invocation = (Get-Variable MyInvocation).Value 
      $directorypath = Split-Path $invocation.MyCommand.Path 
      $file_title = $directorypath.split('\')[-1] 
      "----- 
      "Directory path: `t" + $directorypath 
      "Current file: `t`t" + $file_title 
      "----" 
     } 

私の出力は今まで私は、したがって、この場合には、スクリプトを実行したファイルのパスを表示します。

PS C:\Root\LaunchFromHere 
---- 
Directory path: C:\Root\LaunchFromHere 
Current file:  LaunchFromHere 
--- 

そして私の.txtのタイトルは常にLaunchFromHere.txtです 編集:私はOut-Fileを削除しましたが、結果をテキストファイルに保存します。

したがって、スクリプトの実行中に横断しているファイルの現在の名前を取得するにはどうすればよいですか?

+4

それは、あなたが投稿したコードはあなたにその出力を与えたことを明らかに可能ではありません。 'ForEach-Object'には決して行きません。 –

+0

あなたは正しいです、私の元のコードでは、私は簡単にするために含まれていない結果を印刷していた他の印刷ステートメントがありました。それにもかかわらず、 'Out-File'を削除しても、私が得たアウトプットはまだ私が記述したものです。 – gsamerica

+0

私のコメントを拡大するために、私が含まれていない私の個人的なコードの印刷ステートメントが、Out-Fileにかかわらず受け取った出力の原因であるということです。しかし、コメントとアウトファイルが削除されても、私はまだ説明した出力を得ています。 – gsamerica

答えて

0

次のコードスニペットは、助けることができる:

Push-Location "C:\Root\LaunchFromHere" 
Get-ChildItem -include *.doc -recurse | 
    ForEach-Object { 
     $directorypath = $_.DirectoryName 
     $file_title = $_.Name 
     ( "-----", 
      "Directory path:`t$directorypath", 
      "Current file: `t$file_title", 
      "---" 
     ) | Out-File "$(Join-Path $directorypath "$($_.BaseName).txt")" 
    } 
Pop-Location 

それは例えばセーブfile_I_want1.txtfile_I_want1.docファイルと同じディレクトリに: `アウトFile`はあなたのパイプラインを終了しているため

PS D:\PShell> Get-Content C:\Root\LaunchFromHere\File1\file_I_want1.txt 
----- 
Directory path: C:\Root\LaunchFromHere\File1 
Current file: file_I_want1.doc 
--- 
PS D:\PShell> 
関連する問題