ここから質問投稿すると、最大4000ポイント当たる!!!! >>

[ファイルを名前を変えて複数個コピーを作成、を一括で]
http://oshiete.goo.ne.jp/qa/7808481.html

という質問をしていたのですが、

「wordのファイルを、ファイル名を変えて複数コピーするためのフリーソフ

http://oshiete.goo.ne.jp/qa/5651889.html

という質問を見つけ、参考にしてバッチを編集したのですが、使い勝手が悪いです。

copy *.* 1.*
copy *.* 2.*
copy *.* 3.*
copy *.* 4.*
copy *.* 5.*
copy *.* 6.*
copy *.* 7.*
copy *.* 8.*

というバッチを作ったのですが、
このことにより、コピーを複数作成したいファイルをバッチファイルのアイコンにドラッグ&ドロップすることにより、カレントディレクトリにコピーが8個作成できるようになったのですが、
ドラッグ&ドロップしたファイル以外に、同一ディレクトリにあるファイルすべてのファイルのコピーが作成されてしまいます。

コピーするのをドラッグ&ドロップしたものだけにする方法があれば教えてください。

A 回答 (5件)

bat ファイルの中に変数 %1~%9 を書いておくと、


ドラッグした複数のファイルのフルパスがそれぞれ代入されます。
(ドラッグするファイルが足りない場合はその分はヌルになります)

(ここでは蛇足でしょうが、フォルダをドロップするとフォルダ名がフルパスで代入されます。
なのでフォルダ以下の全ファイルが対象なら利用できます)


なので、例えば
for %%a in ( %1 %2 %3 %4 %5 %6 %7 %8 %9 ) do copy %%a *.*
としておけば順次コピーされます。

注意点としては
・フルパスが長くなるので、ファイル数が多い場合はfor文がコマンド1行に収まらなくなる可能性がある
・(私の既存知識では)変数は9個までなので、それより多いファイルをドロップすると
対象にならないファイルが生じる(多分)
があるので、充分ご注意ください。
    • good
    • 0

enmachoさん、こんな感じでいかがでしょうか。


20から30までの連番をつけてコピーを作るサンプルです。

echo off
for /L %%i in (20,1,30) do copy "%~1" "%~dpn1_%%i%~x1"
pause
    • good
    • 0

コピー元を保管する専用のフォルダを作って、そこにあるものをコピーするようにするのが一番簡単ですね。


つまり、コピー元にする以外の余分なファイルを置かないということです。

そのバッチファイルは欠点があって、コピーし終わったファイルを再びコピーを繰り返してしまうことがあるので危険なプログラムですね。
ですから、名前付きでコピーし終わったファイルは別のフォルダに保存するようにした方が良いでしょう。

copy *.* 完了\1.*

とすれば、終わったものは「完了」というフォルダの中に作られます。

また、「*.*」の部分を工夫すれば色々できます。
MS-WORDファイルに限っているなら、

copy *.* 1.*

ではなく、

copy *.doc* 1.doc

の方が良いでしょう。
また、同じフォルダにコピーしたいものとしたくないものが混在する場合は、たとえば、ファイル名の1文字目に「A」の付くものだけ行う、などの工夫ができます。

copy A*.doc 完了\1.doc
    • good
    • 0

とりあえず3個分ならこんな感じでしょうか。



copy %1 "%~d1%~p1%~n11%~x1"
copy %1 "%~d1%~p1%~n12%~x1"
copy %1 "%~d1%~p1%~n13%~x1"

ドロップしたファイルと同じ場所にコピーを作ります。
複数のファイルをドロップした場合は最初だけ有効です。
複数ファイルをドロップするにはfor文でコマンドをまわす必要がありますから
バッチファイルの文法を勉強してください。
    • good
    • 0

ファイルをコマンドにドラッグ&ドロップすると、引数としてファイル名が渡ってきますので、以下のようにするといいと思います。



copy %1 1%~x1
copy %1 2%~x1
copy %1 3%~x1
copy %1 4%~x1
copy %1 5%~x1
copy %1 6%~x1
copy %1 7%~x1
copy %1 8%~x1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qバッチファイルでドラッグ&ドロップの情報を取得

こんばんは

bat ファイルを書いているのですが、次のような情報の取得仕方がわからず困っています。
bat ファイルを起動するには、あるファイルをドラッグアンドドロップします。

このとき、

set FilePath = ドロップされたファイルの、ドロップされる前にあったパス
set FileName = ドロップされたファイルの拡張子を除くファイル名
set FileExt = ドロップされたファイルの拡張子部分

のように、それぞれの情報を変数に格納したいのですが、どのように書けばよいのでしょうか。
教えてください。

Aベストアンサー

set FilePath=%~dp1
set FileName=%~n1
set FileExt=%~x1

でできます。詳しくは

http://d.hatena.ne.jp/orangeclover/20101004/1286120668

なんかが参考になるでしょうか。

Qbatでファイル名を変更したい(元ファイル名の一部を削除したファイル名に)

batファイルを使ってファイル名を変更する方法を教えてください。
例えば、
変更元ファイル:tata1234.exe
変更先ファイル:tata.exe(元ファイル名の一部を削除した名前)

流れでは、あるファイルをbatにドラッグ&ドロップして
COPY %1 %TMP%\%~nx1
REN %TMP%\%~nx1 ???????
変更したファイルを元ファイルのあったフォルダに移動(orコピー)

別ファイルに出力したりしないと無理でしょうか?宜しくお願いいたします。

Aベストアンサー

元ファイル名の先頭4文字まで残して5文字目以降を消すということでいいでしょうか。

set NAME=%~n1
REN %TEMP%\~nx1 %NAME:~0,4%.%~x1

>変更したファイルを元ファイルのあったフォルダに移動(orコピー)
これはどういう意味?変更とは?

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む

Qファイル名の一部を変更するバッチファイル

フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。
元ファイル名は、
23_ABCA_K.txt
23_ABCL_K.txt
23_ABCL_E.txt
23_ABCA_K.txt というように、頭2桁(日付)は共通で4ファイルあります。

これを、頭2桁を維持して、アルファベットのところを変更したいのです。
23_ABCA_K.txt→23_件数表.txt
23_ABCL_K.txt→23_集計表.txt
23_ABCL_E.txt→23_エラー数.txt
23_ABCA_K.txt→23_合否.txt という具合です。

rename 23_ABCA_K.txt 23_件数表.txt
とすると、頭2桁が変化したときに対応できないし、

%date: などでシステム日付を取得すると、
23_ABCA_k.txtを24日に改名すると、23が保持されず24になってしまう・・・

現状のファイル名の一部を取得して、改名後のファイル名につける
ということはできるのでしょうか?

よろしくお願いします。

フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。
元ファイル名は、
23_ABCA_K.txt
23_ABCL_K.txt
23_ABCL_E.txt
23_ABCA_K.txt というように、頭2桁(日付)は共通で4ファイルあります。

これを、頭2桁を維持して、アルファベットのところを変更したいのです。
23_ABCA_K.txt→23_件数表.txt
23_ABCL_K.txt→23_集計表.txt
23_ABCL_E.txt→23_エラー数.txt
23_ABCA_K.txt→23_合否.txt という具合です。

rename 23_ABCA_K.txt 23_件数表.txt
...続きを読む

Aベストアンサー

日付の部分を?に

ren ??_ABCA_K.txt ??_件数表.txt

ワイルドカードの?は1文字何でも良いとなりますので
23日と24日があれば両方変更されます
それと、件数表と合否のファイル名が同じですよ

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%

Qバッチ終了時にDOS窓を閉じるコマンド

自作バッチについて質問があるのですが、
バッチ終了時にDOSプロンプトを自動的に閉じる方法を教えて下さい。

以下の方法は知っているのですが↓
------------------------------------------------------------
バッチのプロパティ画面の「プログラム終了時にウィンドウを閉じる」を
チェックする
------------------------------------------------------------

上記のようなやり方ではなく、バッチファイルの中に直接コマンドを書いて
設定する方法を教えて下さい。

Aベストアンサー

バッチファイルでウィンドウを閉じるのはexitコマンドです。

exit

だけを記述したバッチファイルを作って実行してみると確認出来ます。

Q特定のフォルダ内のある種類のファイルをすべてコピーし格納する方法

WINDOWSマシン使用。
あるフォルダ(AAA)の中に、複数のフォルダやファイルを含み、またそのフォルダは、
は、下位のフォルダやファイルを含むという関係が続きます。階層は4くらい。
この中の各所にあるフォルダにはwordのファイルやその他のファイルを含んで
います。
このwordのファイルだけをすべて選択しコピーして、別のフォルダ(BETU)へ
入れたい。
簡単に行なう方法、あるいはツールなどあれば紹介をお願いします。

Aベストアンサー

はじめまして。

コマンドプロンプトで
for /f "tokens=*" %i in ('dir /b /s AAA\*.doc') do copy "%i" "BETU"
を実行すれば4階層以上深くても可能です。

※"%i" "BETU"と"でくくるのは、ディレクトリ名に空白がある場合エラーとなるのを防ぐためです。

AAAもBETUもフルパスで記述すればコマンド実行ディレクトリは何処でも構いません。


人気Q&Aランキング