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

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

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

3回答

3681閲覧

バッチファイルを使って、ファイル名と同じ名前のフォルダにコピーさせたい

cjapan35

総合スコア10

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2019/09/17 00:42

編集2019/09/25 08:51

前提・実現したいこと

ファイル名とフォルダ名は完全に一致しているわけではなく、ファイル名が『abc_12345_***』だとすると、フォルダ名は『zzz_12345_###』のように、一部だけが一致しているという形です。
このように完全一致でなくても、部分的に名称が一致しているファイルとフォルダがあり、それぞれ別々のフォルダに格納されていて、今回はテキストファイルをフォルダの方に移動させたいです。
ちなみに、移動させたいファイルはフォルダに2~30個ほどのテキストファイルが入っていて、それらすべてを、名前が一部一致するフォルダが別フォルダに用意されているので、そこに振り分けたいということです。

また、移動先のフォルダは『zzz_12345_###』のフォルダの中にさらに『A』『B』と二つのフォルダがあり、Aの方に入れたいです。
こういうことって可能でしょうか?
毎度batファイルを編集せずとも、ワンクリックでフォルダ移動(コピー)させたいです。

説明わかりにくいかもしれませんがよろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/09/17 01:06

情報不足です。 ファイルの書式は? ファイル名の桁数は? 一部が一致とはどの部分?
cjapan35

2019/09/17 01:35

テキストエディタのファイルなので.txtです。 ファイル名は桁数は特に決まっておらずファイルごとに違います。大体20~30桁くらいでしょうか。 部分的に一致しているのは大体真ん中あたりです。一つ目か二つ目のアンダーラインの次の文字です。
ttyp03

2019/09/17 01:38

失礼。ファイルの書式ではなく、ファイル名の書式でした。 「大体真ん中あたり」ということはそうではない場合もあるということでしょうか?
cjapan35

2019/09/25 08:52 編集

取り消しました。
guest

回答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
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/09/17 02:34

この低評価はストーカーが回答を読まずに行ったものなので、気にしないでください。
cjapan35

2019/09/17 04:13

具体的なコードも記述していただきありがとうございます。 やってみましたが、何も起こりませんでした。 powershellというのは使ったことがないので中身が全く分かりませんが、このコードはまったく変更箇所なくそのままでいいんですか?
Zuishin

2019/09/17 04:15

コードの変更は必要ありませんが、その前の説明通りにする必要があります。
Zuishin

2019/09/17 04:19

どのような手順で試したのか具体的に書いてもらえれば、間違っていた手順がわかるかもしれません。
cjapan35

2019/09/17 10:06

すみません、書いてある通りにしたのですが、できませんでした。 また、今回はできればbatファイルで作りたいのです。 質問追記したので、わかる範囲で教えていただければ幸いです。
Zuishin

2019/09/17 10:08 編集

バッチファイルというのはそこからコマンドを呼び出すものですが、PowerShell もコマンドとして呼び出すことができます。外部コマンドを使わない縛りを入れる意味は全く無いと思います。こちらでは動いているので、そちらの状況の説明が無い限り、できない理由はわかりません。
Zuishin

2019/09/17 10:14

結局、この三回答のいずれも解決できない理由を挙げると「質問者の説明不足」となると思いますが、それに対してどうお考えでしょうか? 今から妥協と称する仕様変更をするよりも、きちんと説明する方が解決に近づくと思いますし、それができない以上、少々妥協を重ねても難しいのではないかと思います。
cjapan35

2019/09/17 10:29

説明した結果無理ですって回答いただいてますし、こちらの環境下でも作成方法でテキスト参照する方法で作るのが適切という判断がなされたのでそうしただけです。 batで作るという指定がある以上こちらはそうするしかないです。やたら高圧的ですがPowerShellを使わないことがそんなに癇に障ったのですか?
Zuishin

2019/09/17 10:33 編集

そんなもの癪に障りません。迷走している原因がどこにあるかを述べているだけなので、迷走を続けたければどうぞ。三回答の結論を全部読んでください。全部「説明不足」と結論づけているのがわかりませんか?
Zuishin

2019/09/17 10:34

> とにかく法則性をみつけるとこですね →法則性がわからないので解決できない > 具体的には、要件が抽象的なので、なんとも。 →要件が抽象的なので解決できない
Zuishin

2019/09/17 10:38

こちらは、妥協前の要件を満たす、解決可能なスクリプトを作り、こちらの環境では問題なく動いています。私とあなたの環境間の違いがわかれば、とっくに解決しているものです。 以上。
cjapan35

2019/09/18 00:22

なぜそんなにムキになっているのかよくわかりませんが、どうもありがとうございました。
cjapan35

2019/09/18 01:15

なぜか低評価つけられたのをストーカー()のせいにしていましたが、あなたのこの沸点の低さを見れば納得がいきました。 もし仮にストーカーのアンチだったとしてもそんなものに粘着されるほどのことを過去にしでかしたということですよね。 まあ単純な回答への低評価の可能性もありますけど。
Zuishin

2019/09/18 01:36

沸点低いですね。低評価しましょうか?
Zuishin

2019/09/18 01:40 編集

まともな回答が欲しければ、いちゃもんつけてないでまともな質問をすることですね。 4 つも質問しているのに、2 点しか無いのはなぜかわかりますか?
Zuishin

2019/09/18 01:56

この質問もそうだし、他の質問も、質問者がまともなら分単位で解決してるような簡単な質問ですよ。
cjapan35

2019/09/25 08:54

なんで煽るのにそんな必死なん?質問者がまともでない低能と判断したなら無視しとけばいいじゃん? しかもわざわざ揚げ足取るためにほかの質問までチェックしててワロタ
guest

0

batファイルはcmdで使える内部関数が不足しているので難しいです
wshなどで補完して処理してください

情報が不足

  • ワンクリックという指定なのでフォルダは固定でよいのでしょうか?

(任意のフォルダを指定して実行する必要は内部?)

  • 一部一致ということは条件が競合する可能性が高いです。

比較する箇所は絶対に競合しないという保証があるのですか?

  • 移動先にすでに同名のファイルがあったときは上書きしてよいのですか?

投稿2019/09/17 01:03

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cjapan35

2019/09/17 01:30

ありがとうございます。wshは使ったことがないのですが、補完ということはcmdと同時?に使ったりできるのですか? あらかじめテキストファイルを格納してあるフォルダがあるので、そのフォルダ固定です。 すべて名前は違うものが設定されているので条件の競合は起きないはずです。 移動先に同名ファイルがあった場合は上書きではなく、別ファイルとして保存したいです。
yambejp

2019/09/17 01:50 編集

> 補完ということはcmdと同時? 基本的にはリプレースすることになりますが、cmdの機能を利用することも可能です (cmdでしかできないことはないと思いますが) では、具体的なsampleを提示ください ・動かすファイル ・動かさないファイル が例示されると回答しやすいです
cjapan35

2019/09/17 02:42

動かしたいファイル→FFF_S_123456_ABCD_TXT.txt 上記のファイル名はあくまでサンプルですが、フォーマットはほとんどこういった形です。基本的に動かしたいファイルが入っているフォルダの中すべてのファイルを移動、というかコピーなのですが、動かしたいです。
yambejp

2019/09/17 02:58

> FFF_S_123456_ABCD_TXT FFF、S、123456、ABCD、TXTといういずれかを含むフォルダがあり そのフォルダ内にAというフォルダが遭った場合移動ということで良いですか?
cjapan35

2019/09/17 03:58 編集

あ、いえ、一致している部分は123456_ABCDあたりの部分です。 そのほかのファイル名はFFF_S_24645_AAAA_TXTだとかFFF_S_78645_BBBB_CSVとかって感じです。あくまでファイルの方はFFF_S_の部分はすべてのファイルに含まれていて、移動させたいフォルダの方はFFFのところがWWWとなっていたりという感じです。
yambejp

2019/09/17 04:01

> これで一つのファイル名 それは理解しています。 ファイル名とフォルダ名の一部が一致したら移動するという命題ですよね?
cjapan35

2019/09/17 04:08

すみません、解釈が間違っていました。一つ上の回答を編集しております。
yambejp

2019/09/17 04:10

「FFF_S_」を比較するとなるともうお手上げですね 前から何文字目から何文字目などなんらかの法則がないかぎり 一部一致は無理です
cjapan35

2019/09/17 10:03

そうですか、すみません、結局妥協して別の方法でやることにしましたが、また不明点があるので、お力お貸しいただけませんでしょうか。 内容は追記として質問文に書いております。
yambejp

2019/09/17 10:08

とにかく法則性をみつけるとこですね 法則さえわかればご自身が解決できなくても質問してもらえば 誰か気が向いた人が回答してくれると思います
cjapan35

2019/09/18 01:03

ありがとうございました。大変助かりました。
guest

0

ファイル名とフォルダー名の対応表を用意しておけばできるかと思います。
具体的には、要件が抽象的なので、なんとも。

投稿2019/09/17 01:41

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問