人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Batファイルについて教えてください。
複数階層にまたがっているエクセルファイルをBatファイルでコピー、又は、移動させたいのです。コピー、移動させたいファイルはファイル名の頭(重複しないIDになっている)を拾ってリストにしてあります。エクセルファイルが複数のフォルダに入っているので、最上階層のフォルダでbatファイルを実行できればと思っていますが。

●質問者: saya667
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● lang_and_engine
ベストアンサー

できました。実行結果も添付します。

事前の状態:


D:\temp\battest>tree /f
フォルダ パスの一覧
ボリューム シリアル番号は 6C76-71D3 です
D:.
│ 移動.bat
│ 移動対象の先頭IDのリスト.txt
│
├─コピー元
│ │ hoge.xlsx
│ │ 移動対象1_fuga.xlsx
│ │
│ └─a
│ fuga.xlsx
│ 移動対象2_hoge.xlsx
│
└─コピー先


D:\temp\battest>type 移動対象の先頭IDのリスト.txt
移動対象1
移動対象2

移動.bat:


@echo off

rem 変数定義
set IDLIST=移動対象の先頭IDのリスト.txt
set FROM_DIR=コピー元
set TO_DIR=コピー先

rem カレントを変数に保持
for /F "usebackq" %%i in (`cd`) do (
 set BAT_DIR="%%i"
)

rem 開始
echo 「%FROM_DIR%」内のファイルを全チェックします。
cd "%FROM_DIR%"

rem 先頭IDごとに
for /f "usebackq" %%n in (`type %BAT_DIR%\%IDLIST%`) do (
 echo --------- 先頭IDが「%%n」であるようなファイルを移動します。 --------- 
 
 rem 発見したファイルごとに
 for /f "usebackq" %%m in (`dir /s /b %%n*.xlsx`) do (
 echo 移動対象ファイル「%%m」を発見しました。コピーします。
 
 rem コピー実行
 copy /y %%m %BAT_DIR%\%TO_DIR%\
 )
)

rem 終了
echo --------- 全コピーが完了しました。コピー結果: --------- 
dir /b %BAT_DIR%\%TO_DIR%
echo -------------------------------------------------------- 

pause

実行結果:


「コピー元」内のファイルを全チェックします。
--------- 先頭IDが「移動対象1」であるようなファイルを移動します。 ---------
移動対象ファイル「D:\temp\battest\コピー元\移動対象1_fuga.xlsx」を発見しました。
コピーします。
 1 個のファイルをコピーしました。
--------- 先頭IDが「移動対象2」であるようなファイルを移動します。 ---------
移動対象ファイル「D:\temp\battest\コピー元\a\移動対象2_hoge.xlsx」を発見しました
。コピーします。
 1 個のファイルをコピーしました。
--------- 全コピーが完了しました。コピー結果: ---------
移動対象1_fuga.xlsx
移動対象2_hoge.xlsx
--------------------------------------------------------
続行するには何かキーを押してください . . .


2 ● jak-san

コピーしたいファイル名の先頭(=ID)が各行に1つずつ列記されているファイルをlist.txtとします。

コピー先はD:\testとします。同一ファイル名の重複があった場合は上書きコピーされますので、それが困る場合はどうしたいかコメントしてください。


for /F "delims=" %%d in ( list.txt ) do for /F "delims=" %%f in ('dir /s /b "%%d*.xls"') do copy "%%f" d:\test

3 ● lang_and_engine

コメント欄での要件追加に伴い,改めて回答させて頂きます。


>重複するファイル名が存在する場合、何を優先して拾っているのでしょうか。

回答1のコードは,「ファイルが見つかった順」に上書き保存しています。


>重複したものも全て拾うことはできますでしょうか。

そのようなバッチを作り,下記エントリに掲載しておきました。

実行結果のログ付きです。

「ファイル名の重複防止機能付き」とあるように,

重複ファイルはファイル名の末尾に 2, 3, ...と番号が振られるようにしてあります。

bat中でforループをネストし,サブルーチンを呼び出して,条件付きファイル検索の結果を一斉コピーしよう (ファイル名の重複防止機能付き)

http://d.hatena.ne.jp/language_and_engineering/20111030/p1

お試しください。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ