質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

解決済

ハッシュ値の一致する中身が等しいファイルの絶対パスの組み合わせをテキストファイルに出力したい。

orange81
orange81

総合スコア1

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

1回答

0評価

0クリップ

150閲覧

投稿2022/03/31 11:22

バッチ作成の練習のため、下記のような「test」フォルダを作成し、
C:.
│ test-a.txt
│ test-b.txt

└─test2
│ test-a - 1.txt
│ test-c.txt

└─test3
test-a - 2ー.txt
test-d.txt

ファイル名に「a」のつくものは中身が「1」でそれ以外のファイルは適当な数字を入れています。

powershellで指定したフォルダの中のすべてのファイルのハッシュ値を比較して異なる絶対パスのファイルにハッシュ値の一致するファイルがあったら、その組み合わせをテキストファイルに出力するプログラムを作成しているが、指定したフォルダの絶対パスを入力した後にエラーもなく動作もなくなった。

実現したいこと

現在の問題を解決して無事にファイルの重複を知らせるテキストファイルを出力させたい。

発生している問題・エラーメッセージ

特になし 処理が終了しない。

該当のソースコード

powershell 5.1.19041.1320

$Folder_a = read-host 確認したいフォルダのパスを入力してください。

$PWD = get-location
[int]$i=0
[int]$j=0

$Path_a =@(get-childitem $Folder_a -recurse -Filter *.txt | select-object fullname)

$Hash_a =@(get-childitem $Folder_a -recurse -Filter *.txt | get-filehash -Algorithm MD5 | select-object hash)

if ($Path_a.length -ne $Hash_a.length)
{
echo "パスの総数とハッシュの総数が一致しません、処理を終了します。"
exit
}
else
{

while ($i=0 -le $Path_a.length-1) { [int]$j= 0 while ($j=0 -le $Path_a.length-1) { if ($Hash_a[$i] -eq $Hash_a[$j] -and $i -ne -$j) { echo $Path_a[$i] $Path_a[$j] >> $PWD\"重複".txt $j++ } else { $j++ } } $i++ }

}

試したこと

処理が終わらなかったためctrl+Cで中断後、「$Path_a」と「$Hash_a」を確認するとそれぞれ格納されていることを確認、

「$Path_a」

C:\Users\test\test-a.txt
C:\Users\test\test-b.txt
C:\Users\test\test2\test-a - 1.txt
C:\Users\test\test2\test-c.txt
C:\Users\test\test2\test3\test-a - 2ー.txt
C:\Users\test\test2\test3\test-d.txt

「$Hash_a」

C4CA4238A0B923820DCC509A6F75849B
C20AD4D76FE97759AA27A0C99BFF6710
C4CA4238A0B923820DCC509A6F75849B
202CB962AC59075B964B07152D234B70
C4CA4238A0B923820DCC509A6F75849B
81DC9BDB52D04DC20036DBD8313ED055

また、一見ハッシュ値が一致しているように見える値が等しいか確認すると

PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[4]
False

PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[2]
False

PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[0]
True
となり、インデックスの値が一致しないとtrueにならないことを確認した。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
初めての利用で書き方が違っていたら申し訳ありません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。