前提・実現したいこと
ファイル名とフォルダ名は完全に一致しているわけではなく、ファイル名が『abc_12345_***』だとすると、フォルダ名は『zzz_12345_###』のように、一部だけが一致しているという形です。
このように完全一致でなくても、部分的に名称が一致しているファイルとフォルダがあり、それぞれ別々のフォルダに格納されていて、今回はテキストファイルをフォルダの方に移動させたいです。
ちなみに、移動させたいファイルはフォルダに2~30個ほどのテキストファイルが入っていて、それらすべてを、名前が一部一致するフォルダが別フォルダに用意されているので、そこに振り分けたいということです。
また、移動先のフォルダは『zzz_12345_###』のフォルダの中にさらに『A』『B』と二つのフォルダがあり、Aの方に入れたいです。
こういうことって可能でしょうか?
毎度batファイルを編集せずとも、ワンクリックでフォルダ移動(コピー)させたいです。
説明わかりにくいかもしれませんがよろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/17 01:38

回答3件
0
移動するファイルとフォルダがともに同じディレクトリにある場合です。
まず、以下のコードを拡張子 .ps1 のテキストファイルとして適当な場所に保存してください。
次にデスクトップを右クリックし、新規作成→ショートカットでショートカットを作成し、「項目の場所」には「powershell.exe -ExecutionPolicy Unrestricted <スクリプト名>」を指定してください。
ここで <スクリプト名> は先ほど保存した .ps1 ファイルのフルパスです。例えば powershell.exe -ExecutionPolicy Unrestricted c:\users\zuishin\documents\WindowsPowerShell\移動.ps1
のように指定します。
完了してショートカットができたら、それを右クリックしてプロパティを開き、「作業フォルダー」に移動するファイルおよびフォルダのあるパスをフルパスで入力してください。
好みに応じて「実行時の大きさ」を「最小化」にすれば、ウィンドウを画面に広げず処理できます。
以上でできたショートカットをダブルクリックすれば移動しますが、このスクリプトは移動するファイルとフォルダが同じフォルダにあることを前提にしています。
本番で試す前に一度新しいフォルダを作り、そこに移動するファイルとフォルダをコピーし、それを作業フォルダーに指定して試してください。
PowerShell
1function CountFowardMatch { 2 Param([string]$A, [string]$B) 3 if ($A -eq $null -or $B -eq $null) { return 0 } 4 $result = 0 5 while ($result -lt $A.Length -and $result -lt $B.Length) { 6 if ($A[$result] -ne $B[$result]) { return $result } 7 $result++ 8 } 9 return $result 10} 11 12$dirs = Get-ChildItem -Directory 13Get-ChildItem -File | Foreach-Object { 14 $file = $_ 15 $dest = $dirs | 16 Select-Object FullName, @{ Name = 'Count'; Expression = { CountFowardMatch $_.Name $file.Name } } | 17 Sort-Object Count -Descending | 18 Select-Object -First 1 19 Move-Item -Destination ($dest.FullName + '\A') -LiteralPath $file 20} 21 22
投稿2019/09/17 02:19
編集2019/09/17 02:22総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
batファイルはcmdで使える内部関数が不足しているので難しいです
wshなどで補完して処理してください
情報が不足
- ワンクリックという指定なのでフォルダは固定でよいのでしょうか?
(任意のフォルダを指定して実行する必要は内部?)
- 一部一致ということは条件が競合する可能性が高いです。
比較する箇所は絶対に競合しないという保証があるのですか?
- 移動先にすでに同名のファイルがあったときは上書きしてよいのですか?
投稿2019/09/17 01:03
総合スコア117605
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。