以下のようなフォルダ構成があるとします。
C:.
├─aaa
│ ├─bbb
│ │ ├─g.txt
│ │ └─h.txt
│ └i.txt
└─j.txt

これら全階層のファイルに対して処理をして、

C:.
├─ccc
│ ├─ddd
│ │ ├─g.tst
│ │ └─h.tst
│ └i.tst
└─j.tst

とフォルダ構成そのままに移したいと考えています(拡張子tstは適当な例です)。

これをWindowsのバッチで何とか実行したいのですが何とかなりませんでしょうか。
フォルダ構成はxcopyで移すとして、個別のファイルに対しての処理が出来ずにおります。
お知恵を拝借出来れば幸いです。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> アプリケーションを通して変換したファイルのみを、別フォルダにフォルダ構造ごと移したいと思っています。



なるほど。じゃあこんな感じで。
---ここから---

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion

rem 処理元フォルダ
set srcfolder=c:\aaa

rem 処理元フォルダの文字数
set srcfolderlen=6

rem 処理元ファイルの拡張子
set srcext=.txt

rem 処理元ファイルの拡張子の文字数
set srcextlen=4

rem 処理先フォルダ
set dstfolder=c:\ccc

rem 処理先ファイルの拡張子
set dstext=.tst

for /R %srcfolder% %%f in ( *%srcext% ) do (
set src=%%f
set dst=%dstfolder%!src:~%srcfolderlen%,-%srcextlen%!%dstext%

rem ディレクトリ作成。ちょっと泥臭いです
mkdir !dst!
rmdir !dst!

rem 処理コマンド(!src!は処理元ファイル、!dst!は処理先ファイルが入る)
echo !src!→!dst!
)
---ここまで---

C:\AAA 中の*.txt から、同じディレクトリ構成でC:\CCC下の*.tst なファイル名を生成し、
それを表示してるだけですので、処理内容に応じて適宜書き変えて下さい。
    • good
    • 0
この回答へのお礼

なるほど、何とかなりそうです。
ありがとうございました。

お礼日時:2011/04/21 19:54

以下のバッチファイルで、階層的に全ディレクトリ中の「*.txt」を見つけ出して、「*.tst」にリネームできます。


---ここから---
for /R %%f in ( *.txt ) do ren %%f *.tst
---ここまで---
このままだと、バッチファイルを実行した時のカレントディレクトリが起点になりますが、たとえば、

---ここから---
for /R C:\ %%f in ( *.txt ) do ren %%f *.tst
---ここまで---

のように、起点を指定(この場合C:\)してファイルを探すことも出来ます。

この回答への補足

繰り返しになりますが、アプリケーションを通してファイルを変換するので、
コピーしてリネームしてという訳ではありません。

説明不足でした。

アプリケーションを通して変換したファイルのみを、別フォルダにフォルダ構造ごと
移したいと思っています。

元ファイルと同一フォルダ内で変換してから、xcopyで移せばいいのでしょうか。

補足日時:2011/04/21 19:11
    • good
    • 0

xcopy /?



を見ればわかります。聞く前にヘルプ見ようね。

この回答への補足

アプリケーションを通してファイルを変換するので、コピーしてリネームしてという訳ではありません。

説明不足でした。

補足日時:2011/04/21 18:56
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

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

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

例:
test.txt
abcacbacbacbacbacbacbacbacb

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

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

Aベストアンサー

これですね。

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

Qコマンドプロンプトでファイルを新規作成をしたいのですが。

よろしくお願いいたします。
実は、windows2000のコマンドプロンプトで
コマンドを勉強しているのですが、
コマンドでファイルを新規作成はできませんか?
mkdir、mdでフォルダの新規作成はできるのですが。
helpにもファイルの新規作成らしきものが
見当たらないのでやはり不可能ですか?
テキストファイル(.txt)でいいので
くだらない質問かも知れませんが、
アドバイスよろしくお願いいたします。m(_ _)m

PS:いまさらコマンドなんていわないでくださいね。(^^;

Aベストアンサー

既にみなさんが回答されているCON(SOLE)からの入力では作れない
「サイズ0バイトのファイル」を新規作成する方法です。
(結局リダイレクトなんですけどね)

【前提】対象ファイルが無いこと。
    下の例ではfoo.txtが欲しい時ですがfoo.txtが存在してはいけません。

type foo.txt > foo.txt
これで0バイトのファイルが作成されます。
VB(VBA)でOPEN/CLOSEでも良いのですが、お手軽に作成する場合の参考に。

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別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QDosバッチでファイルパスからフォルダパス取得

Dosバッチで引数指定されるファイルパスからフォルダパス部分を抜き出したいと思っています。

例)----------------------------------------------
「C:¥hoge1¥hoge2¥a.txt」が引数で指定されてきた場合、
「C:¥hoge1¥hoge2¥」の部分を変数に格納したい
-----------------------------------------------

ちなみに、指定されてくるパスは不規則です。

どなたか良い方法をご存知でしたらご教授宜しくお願い致します。

Aベストアンサー

わざわざ 2回参照するまでもなく
%~dp1
でよかったりします>#2.

Qバッチで指定ファイルの文末に改行コードをつけたい

指定フォルダ内にある全てのテキストファイルの文末に改行コードをつけたいと思っています。
しかし指定フォルダの中にあるサブフォルダやファイル名は不変ではありません。
量も大変な数があるためバッチファイルを作ろうとしています。(*.bat)

あるフォルダを指定すればそのフォルダに含まれるサブフォルダも対象とし
全てのテキストファイルの文末に改行コードをつけたいのですが
バッチファイルにはどのように記述すればよいのでしょうか?
理想ではそのバッチファイルが実行されているフォルダをカレントディレクトリとして取得し
そのカレントディレクトリ内のテキストフォルダ(ここでのフォルダ名は固定の予定)を指定フォルダとしたいです。

以前ほんの少しだけプログラムを触った事がある程度でコマンドプロンプトは殆ど触った事がありません。
下記のようなページを参考にしていますがうまくいきませんでした。
どなたか御教授して頂けないでしょうか。

http://oshiete.goo.ne.jp/qa/6496815.html
http://oshiete.goo.ne.jp/qa/4632586.html
http://oshiete.sponichi.co.jp/qa5051199.html

指定フォルダ内にある全てのテキストファイルの文末に改行コードをつけたいと思っています。
しかし指定フォルダの中にあるサブフォルダやファイル名は不変ではありません。
量も大変な数があるためバッチファイルを作ろうとしています。(*.bat)

あるフォルダを指定すればそのフォルダに含まれるサブフォルダも対象とし
全てのテキストファイルの文末に改行コードをつけたいのですが
バッチファイルにはどのように記述すればよいのでしょうか?
理想ではそのバッチファイルが実行されているフォルダをカレントデ...続きを読む

Aベストアンサー

No2です。

ファイル末に改行コードをつけると言うことですね。
前回書いたステップ1だと、

more file.txt > file.out

で、末尾が必ず改行になります。あとは、

move file.out file.txt

で、もとのファイルに戻す。

ステップ2は、for /r を使います。/r はその下のフォルダのファイル全部と言うこと。

for /r %%F in (*.txt) do (
 more %%F > workfile.tmp
 move workfile.tmp %%F
)

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&Aランキング

おすすめ情報