漫画『酒男子』のAIボットを作ると高級日本酒が当たる!! >>

Win2000のDOS窓にて、xxx.batファイルを使用して
大量のファイルのコピーをしようとしています。

その時、コピー先に同じファイル名が存在する場合
があります。その時、(xxx.batファイルの内容を変える
こと無く)自動的に
ファイル名001
ファイル名002
:
と名前を変えて保存してくれるような「copyコマンド」
知りませんか?

以上、宜しくお願い致します。

A 回答 (2件)

残念ながらそのようなコマンドはありません。


で、バッチを作ってみました。
よかったら使ってみてください。

ファイル名.xxx
ファイル名001.xxx
ファイル名002.xxx
と変わっていきます。
(最初のファイルはそのままです)

@echo off

set orgFile=%~f1
set newFile=%~f2
set newFile1=%~dpn2
set newFile2=%~x2
set Count=0

:loop
if not exist %newFile% goto loop_end
set /a Count=%Count%+1
set Count=000%Count%
set Count=%Count:~-3%
set newFile=%newFile1%%Count%%newFile2%
goto loop
:loop_end

copy %orgFile% %newFile%
    • good
    • 3
この回答へのお礼

ありがとうございます。まさにこれです。
従来のcopyコマンドを置き換えることにより、
所望のことができるようになりました。

お礼日時:2003/06/07 02:27

そこまで細かな機能が必要であれば、RADツール(VB、Delphi等)で作り込んだ方が簡単だと思います。



仮にDOSバッチだけで可能だとしても(可能かどうか知りませんが)簡単ではないと思います。
    • good
    • 0

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

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

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

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

Qバッチファイル XCOPYで上書きしない

バッチファイルでXCOPYを実行し既存ファイルを上書きしないようにしたい(上書き確認を自動でNo返答する)さらに、存在しないファイルはコピーしたい
●構成
・C:\test\A\A.txt がある
・バッチファイルと同列に、A\A.txt 及び B.txt が存在
 さらにバッチファイルと同列に、からフォルダB が存在
●試したコマンド:
XCOPY * C:\test /E /-Y /Q < nul > nul
●結果:C:\test\A\A.txt は上書きされないが、B.txt 及びフォルダBがコピーされない
●求める結果:
C:\test\A\A.txt は上書きされず、コピー先に存在しないB.txt 及びフォルダBがコピーしたい

宜しくお願いいたします。

Aベストアンサー

直接の回答とは少し異なりますが。
もしも、「存在するファイルは上書きしない」というのが、
「変更されていなければ上書きしない」
というレベルで良いのなら、

XCOPY /s/m * C:test

で可能です。

/m オプションは、アーカイブ属性のファイルのみ
コピーして、その時に、アーカイブ属性をクリアします。
アーカイブ属性自体は、ファイルが更新されたときにセット
されるので、結果的に、更新されたファイルだけコピー
することが出来ます。

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

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

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

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

Aベストアンサー

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

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

区別するなら、

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

Qxcopyで特定のファイルのみをコピーする方法

xcopyもしくはcopyコマンドを使用し、ディレクトリ内の特定のファイル(複数)を
コピーするにはどのようにしたら良いのでしょうか?

特定のファイルの数が多すぎるため、一行ずつコマンドを書くのは手間が掛るため、
何か良い方法があれば教えて頂きたいと思います。

excludeオプションを使用すれば特定のファイルを除外できるようですが、
反対の意味の特定のファイルのみをコピーしたいです。

例)
c:\test内は以下のファイルがあります。
・aaa.txt
・bbb.txt
・ccc.txt
・ddd.txt
・eee.txt

これらのファイルの内、bbb.txtとddd.txtとeee.txtをコピーしたいです。

Aベストアンサー

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt c:\distdir

尚、この場合は拡張子がいずれも txt なので、以下のように書くと文字数を若干減らせます。
1コマンドラインの文字数は限りがあるので、ファイル数が多くて他の部分を縮めたい時に有用です。
for %a in ( bbb ddd eee ) do xcopy c:\test\%a.txt c:\distdir

ところで、文法を正確に記憶してなくて恐縮ですが、
Windows 配下のコマンドプロンプトが備えるコマンドでは、
予め対象のファイル名リストをテキストファイルで作っておき、
そこからファイル名を1個ずつ拾ってコマンド実行させる事が可能です。

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt ...続きを読む

QXCOPYで指定したフォルダとファイルをコピーしたい

C:\AAAフォルダとC:\AAA以下のファイルをコピーしたくて、
XCOPY C:\AAA D:\BBB /E
とすると、コピー先のD:\BBBにはAAAフォルダにあるファイルはコピーされるのですが、AAAフォルダそのものはコピーされません。
XCOPY C:\ D:\BBB /E
とすればコピーできるのですが、そうするとC:\のほかのフォルダもコピーされてしまいます。
EXCLUDEオプションを使うには指定するファイルが多いため、あまり使いたくありません。(コピーする前にMDでコピー先にAAAフォルダを作成するのもなるべく避けたい)
知っている方がいらしたら教えて下さい。

Aベストアンサー

xcopy /e C:\AAA D:\BBB\AAA
複数ファイルのコピーでコピー先が存在しないとき、ファイル名と見なすかディレクトリ名と見なすか聞いてきます。

応答を聞かれるのが嫌なら
echo d | xcopy /e C:\AAA D:\BBB\AAA
でいいはず。

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ファイル名が同じ場合自動的に番号を付ける方法ありますか?

データを整理する時などフォルダに同じファイル名が存在する場合「同じファイル名が存在します」と警告メッセージが出ます。その場合また違うファイル名を入力しなければならなくなりとても面倒です。
このような場合(1)(2)など自動的にファイル名の末尾につけ回避してくれるような方法、またはソフトがあれば便利なのですが、そのようなものはありますでしょうか。
説明不足な点がありましたら敏速に対応します。
よろしくおねがいします。

Aベストアンサー

> ソフトがあれば便利なのですが

オンラインソフトを探す場合、Vector(http://www.vector.co.jp/)から「ファイル名 重複」などのキーワードで情報収集すると良いです。
重複したファイルを探す、削除するソフトはあるようでしたが、連番をつけて名前変更というのは見当たらないようでした。

--
連番をつける手順で不明瞭なのは、

> (1)(2)など自動的にファイル名の末尾につけ回避してくれる

・当然、ファイルの種類(拡張子)はそのままって事で。
・既に(1)がついているファイルは?
 data(1).txt → data(1)(1).txt
・先に何らかの理由で(1)がついたファイルが既に存在していた場合、(1)をつける事によってそのファイルを上書きすることになるかも?
 c:\folder1\data.txt → c:\data(1).txt
 c:\folder2\data.txt → c:\data(2).txt
 c:\data(1).txt <上のファイルを作成する以前に存在していたファイル>

など、手作業では臨機応変に対処できるような状況でも、PCに「自動的に」処理させる場合には困った事になる場合があります。

--
データベースのカテゴリという事で、Excelを使ってバッチファイルを作る例をはしょって書きますと、

1) コマンドプロンプトで「dir /s /b > dir.txt」を実行し、ファイルの一覧を書いたテキストファイルを作成する。
2) テキストファイルをExcelで開く。
3) ファイルのフルパスからファイル名、拡張子を個別に抽出する。
自由観察 - 文字列の抽出
http://homepage1.nifty.com/midnight/excel/vba/choose.html
4) ファイル名でソートなど行い、重複したものを抽出、処置。
  ソート後、「現在のセルの値=1コ上のセルの値」となっているセルが重複などの条件を利用。
4) = "ren" & 元のフルパス & 空白 & コピー先のディレクトリ & ¥ & 新しいファイル名 & 拡張子
  などの文字列の処理を行い、ファイル名をリネーム、コピーなどするDOSコマンドの文字列を作成。
5) bat拡張子のテキストファイルとして保存。
6) バッチ処理を実行。

> ソフトがあれば便利なのですが

オンラインソフトを探す場合、Vector(http://www.vector.co.jp/)から「ファイル名 重複」などのキーワードで情報収集すると良いです。
重複したファイルを探す、削除するソフトはあるようでしたが、連番をつけて名前変更というのは見当たらないようでした。

--
連番をつける手順で不明瞭なのは、

> (1)(2)など自動的にファイル名の末尾につけ回避してくれる

・当然、ファイルの種類(拡張子)はそのままって事で。
・既に(1)がついているファイルは?
 data(1)....続きを読む

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バッチ処理でファイルの中身を変数に入れるやり方

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

例:
test.txt
abcacbacbacbacbacbacbacbacb

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

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

Aベストアンサー

これですね。

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

Qコマンドプロンプトによるフォルダ内のファイル存在有無

バッチ処理で、特定のフォルダ内(配下にフォルダとファイルが混在している)でファイルだけの存在有無を調べて、ファイルが存在している場合とファイルが存在していない場合で処理を別々に行わせようとしたいのですが、ファイルの存在有無はどのようにコマンドで調べれば良いでしょうか?

DIR C:\test\*.* でファイルを調べて、ERRORLEVELでif判定させようと思っているのですが、 DIRコマンドでこれを行うと、フォルダまで表示されます。

どのようにしたら良いのでしょうか?教えてください。

Aベストアンサー

コマンドプロンプトで、「DIR /?」と入力すれば、DIRコマンドのヘルプが表示されます。

その記述によれば
「/A」属性スイッチで、必要な属性を持つファイルを指定できます。

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日があれば両方変更されます
それと、件数表と合否のファイル名が同じですよ


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング