• ベストアンサー

ファイルのサイズを0にする or サイズ0のファイルを作成したい。

フォルダおよびファイルの構造をサイズを0にしてコピーしてくれるツールを探しています。 例えば、 フォルダ0 ├ フォルダ1 │ ├ a.txt (1KB) │ ├ b.jpg (50KB) │ └ c.exe (200KB) │ └ フォルダ2   ├ d.lzh (3MB)   ├ e.rar (20MB)   └ f.zip (500MB) という構造があったとします。 この上記の構造を読み取り、別の場所に対して、 フォルダ3 ├ フォルダ4 │ ├ a.txt (0byte) │ ├ b.jpg (0byte) │ └ c.exe (0byte) │ └ フォルダ5   ├ d.lzh (0byte)   ├ e.rar (0byte)   └ f.zip (0byte) この様に出力するようなソフトウェアを探しています。 または別の場所に出力せずとも直接ファイルサイズを0にするような物でも構いません。 バックアップ用途で容量を食わずファイル、フォルダの構造だけを 見る事が出来る様にする為、どうしても必要です。 接続されていないメディアのファイル、フォルダを検索するツールもありますが 汎用性の低さから実用には至れませんでした。 心当たりのある方、どの様なご意見でも構いませんので ご回答いただけると幸いです、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.7

> よろしければ具体的な記述の仕方を教えていただけると助かります。 copy /Y nul C:\tesuto\1\a.txt copy /Y nul C:\tesuto\1\b.txt copy /Y nul C:\tesuto\1\c.txt copy /Y nul C:\tesuto\2\d.txt copy /Y nul C:\tesuto\2\e.txt copy /Y nul C:\tesuto\2\f.txt > 1. dirコマンドで階層内容を表示、内容をファイルに出力。 > 2. 出力されたファイル内容を置換。 > 3. copyコマンドでファイルを読み込みファイルサイズ0でコピー。 > という3行程で求める動作が得られるわけですよね? > これで上手く行くのであればまあ良いのですけどもう少し簡略化する方法は無いのでしょうか。 では指定ディレクトリ以下のファイルを全てからにするバッチファイルを教えます。 以下の1行からなるバッチファイルを作成し、 コマンドプロンプト、またはダブルクリックで実行してください。 for /R "C:\tesuto" %%F in (*) do copy /Y nul %%F "C:\tesuto"の部分はもちろん必要に応じて書き換えます。 指定したディレクトリ以下のファイルを全て実質的に削除してしまう 危険な記述なので実行は慎重に。 ちなみに (*) のところを (*.txt) とかすると テキストファイルだけを対象にできたりします。 また for /R "C:\tesuto" %%F in (*) do echo copy /Y nul %%F と echo を入れておくとcopyコマンドが実行されず表示されるだけになるので、 期待通りのコマンドが実行されているかテストできます。

noname#87418
質問者

お礼

ご回答ありがとうございます。 何度もすみません、ご迷惑おかけします。 copy /Y nul C:\tesuto\1\a.txt copy /Y nul C:\tesuto\1\b.txt copy /Y nul C:\tesuto\1\c.txt copy /Y nul C:\tesuto\2\d.txt copy /Y nul C:\tesuto\2\e.txt copy /Y nul C:\tesuto\2\f.txt 早速ですがこちらの記述を試してみましたがコピーされませんでした。 私がした具体的な操作としては、 テキストエディタで編集した上記の内容のバッチファイルを C:\tesuto2 で実行しました。 コピーされる様子がないのでためしに nul を消して実行してみましたが、そうすると、 C └ tesuto2   ├ a.txt   ├ b.txt   ├ c.txt   ├ d.txt   ├ e.txt   └ f.txt この様にファイルが出力され、ファイルサイズも0にならずフォルダも作成されず、 コピー元と同様の階層内容も再現されませんでした。 >for /R "C:\tesuto" %%F in (*) do copy /Y nul %%F こちらについては copy の段階で引っかかっている状態なのでまだ試しておりません。 ちなみに、今の今まで書き忘れていたのですが、OSはWindowsXP Pro SP2を使用しております。 どうもありがとうございました。

その他の回答 (7)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.8

> 早速ですがこちらの記述を試してみましたがコピーされませんでした。 いや、その記述はC:\tesuto以下のファイルのサイズを0にするものだから ファイルは増えませんよ。 「直接ファイルサイズを0にするような物でも構いません。」って書いてたからね。

noname#87418
質問者

お礼

ご回答ありがとうございます。 >いや、その記述はC:\tesuto以下のファイルのサイズを0にするものだから >ファイルは増えませんよ。 そうでしたか、いやはや、お恥ずかしい。 テスト用ディレクトリのファイルのサイズが元々0だったので挙動が分かりませんでした。 改めて試してみましたが、見事に動作いたしました。 バッチファイル用の記述も問題なく動作しました。 だた、本当に危険で怖い記述ですね、一歩間違えたら大変な事になるんじゃないかと思いました。 バッチファイルを書き換えずにあらかじめ実行場所を定めておき サイズを0にしたいファイルをそこへ移動させた方が良いかもしれませんね。 本来であれば0サイズでコピーという動作が望ましかったのですが 同様の結果が数クリックで得られるので大きな問題はありません。 今回は大変助かりました、感謝しきれないくらいです、本当にありがとうございました。

noname#87418
質問者

補足

申し訳ありません、家を空けていたもので、お礼が遅くなってしまいました。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.6

サイズ0のファイルはコマンドプロンプトで copy nul size0.txt とすれば作成できます。 また、コマンドプロンプトで dir /b /s とすれば、カレントディレクトリ以下のファイルパスが全て出力されるので この結果を適当なファイルにリダイレクトしておき、 テキストエディタの置換機能などで行頭に copy /Y nul を付加したバッチファイルを作れば目的のことはできると思います。 (/Yは上書き確認のメッセージを表示させないオプション。) バッチファイルが書けるならforループなどを使えばもっと自動化できるでしょう。

noname#87418
質問者

お礼

ご回答ありがとうございます。 コマンドプロンプトですか。 >また、コマンドプロンプトで >dir /b /s >とすれば、カレントディレクトリ以下のファイルパスが全て出力されるので >この結果を適当なファイルにリダイレクトしておき ご提示の方法に従い、ここまでは無事出来ました。 C:\tesuto\1 C:\tesuto\2 C:\tesuto\1\a.txt C:\tesuto\1\b.txt C:\tesuto\1\c.txt C:\tesuto\2\d.txt C:\tesuto\2\e.txt C:\tesuto\2\f.txt テスト用のディレクトリを指定し、このような形でファイルが出力されました。 次に、 >テキストエディタの置換機能などで行頭に >copy /Y nul >を付加したバッチファイルを作れば目的のことはできると思います。 >(/Yは上書き確認のメッセージを表示させないオプション。) こちらを試してみましたが残念ながらうまく処理が行われませんでした。 上記に挙げた出力内容にcopyコマンドを組み合わせるのですよね? コマンドプロンプトなどは不慣れでいまいち勝手が分からず、 よろしければ具体的な記述の仕方を教えていただけると助かります。 >バッチファイルが書けるならforループなどを使えばもっと自動化できるでしょう。 バッチファイルについては>dir /b /sの段階でも既に利用しましたので多分大丈夫だとは思いますが、 私はコマンドプロンプト自体ほとんど使ったためしがないので、 forの利用方法に付いては分かりません、よければ書き方を教えて下さればと。。 とりあえず、回答者様のおっしゃる方法ですと。 1. dirコマンドで階層内容を表示、内容をファイルに出力。 2. 出力されたファイル内容を置換。 3. copyコマンドでファイルを読み込みファイルサイズ0でコピー。 という3行程で求める動作が得られるわけですよね? これで上手く行くのであればまあ良いのですけどもう少し簡略化する方法は無いのでしょうか。 どうもありがとうございました。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.5

ハッキリ言うと、そういう目的に価値を見いだす人が殆どいないのでその様なことを一括で行うソフトはありません。 そういう結果を求める人は自分でプログラムを作ります。そんなに難しくありません。 使い捨てで作ったことがあります。 わたしの場合はPerlでしたが、Perlの勉強に使っていた書籍に載っていたサンプルプログラムをチョット弄ればすぐに出来ます。

noname#87418
質問者

お礼

ご回答ありがとうございます。 >ハッキリ言うと、そういう目的に価値を見いだす人が殆どいないのでその様なことを一括で行うソフトはありません。 確かに私もそう思いました。 質問の前にも該当するツールを探しましたが見つかりませんでしたし。 >そういう結果を求める人は自分でプログラムを作ります。そんなに難しくありません。 私も自分で作れたら良いのにと思いましたが プログラミングなどは未経験で右も左も分からない状態ですし、時間も掛かりそうですから 出来れば公開されているソフトウェアで何とかしたいと思う気持ちがありまして。 自己作成についても検討してみます、ありがとうございました。

回答No.4

試していない状態での回答で恐縮ですが、 http://www.vector.co.jp/soft/win95/util/se343711.html 作成時にディレクトリ構造も指定可能ならば、おっしゃる操作が可能かと思います。(全て0バイトのダミーファイル)

noname#87418
質問者

お礼

回答ありがとうございます。 ご提示のツールを試してみました。 残念ながら思うような結果は得られませんでした。 テキストやxlsファイルを指定しファイルやフォルダを作成する事は可能でしたが、 テキストかxlsしか読み込む事が出来ないのでディレクトリを直接指定し階層を丸々コピーする事は不可能でした、 あらかじめツールの書式に従い階層内容をテキストかxls形式に変換する必要があります。 フォルダの作成も可能と書いてあったので期待したのですが、 階層を一気に作成処理する事は出来ませんでした。 そもそもサブフォルダを作るという事が出来ませんでしたので。 例えば、 a.txt b.txt c.txt と記述したテキストからファイルかフォルダを出力すれば、 上記の通りの名前のファイルかフォルダが指定ディレクトリに対し作成されます、 可能な動作はこれだけで複雑な書式には対応しておらず、 フォルダ1 │ ├ フォルダ2 │ └ a.txt │ ├ フォルダ3 │ └ b.txt │ └ フォルダ4   └ c.txt 例えばこの様な形の物を一気に作成する事は不可能でした。 どうもありがとうございました。

  • kmrt
  • ベストアンサー率47% (43/91)
回答No.3

A.No1です 私の持っている知識では同一ディレクトリ構造を 0バイトでコピーする手段を知りません。 ちなみに下記URLのツールであればいかがでしょう? CSVでの摘出できるので利用に値すると思いますよ。

参考URL:
http://www.vector.co.jp/vpack/filearea/win/util/file/list/
noname#87418
質問者

お礼

ご回答ありがとうございます。 >私の持っている知識では同一ディレクトリ構造を >0バイトでコピーする手段を知りません。 そうですか、残念です。 >ちなみに下記URLのツールであればいかがでしょう? >CSVでの摘出できるので利用に値すると思いますよ。 ありがとうございます、 ところで、ご提示のURLですとソフトウェアの一覧がずらっと出るわけですが、 具体的にはなんというソフトでしょうか?この中から各自探せばいいのでしょうか。 どうもありがとうございました。

noname#210617
noname#210617
回答No.2

ANo.1様の回答で目的は達成されるものと思います。 >サイズ0のファイルを作成 コマンドプロンプトで copy con x.txt[Enter] ctrl-z とすれば、作成できます。 conはコンソールのことで、キーボードからの入力をx.txtにコピーすることになります。ctrl-zはその入力を終了させます。 または、メモ帳を起動して、何も入力しないで「名前をつけて保存」しても作ることができます。

noname#87418
質問者

お礼

ご回答ありがとうございます。 ええと、自動で作成する方法はないのでしょうか? >コマンドプロンプトで この方法ですと1構造ごとに、 コマンドプロンプトを開く or バッチファイル起動 ↓ 文字入力 ↓ 終了 という手順を行わなければなりません。 >または、メモ帳を起動して、何も入力しないで「名前をつけて保存」しても作ることができます。 こちらの方法も同様で、ファイルとフォルダの数だけ新規作成からファイルとフォルダを作成し コピー元から名前をコピーして貼り付け、という作業を行わなければなりません。 なんとか一括で行う方法は無いのでしょうか。 どうもありがとうございました。

  • kmrt
  • ベストアンサー率47% (43/91)
回答No.1

フォルダー・ファイル構造を確認するだけであれば コマンドプロンプトにて<tree>コマンドを利用されては? 私は<tree>コマンドの出力情報をテキストファイルに出力して確認等に利用してます。 例> tree [表示したいパス] > [保管テキストファイルのパス] CドライブのProgram Filesフォルダー内の情報をCドライブの<tree.txt>へ出力するには下記のとおりになります。 tree c:\Program Files > c:\terr.txt

noname#87418
質問者

お礼

早速のご回答ありがとうございます。 treeですか、大変申し訳ありませんが既にテキストデータでの管理は行っております。 treeコマンドは今回初めて使いましたが、出力内容のカスタマイズが乏しいと感じました。 私は普段テキストの出力にWin Treeを使用しております。 また、テキストですと例えばソートなどが行えませんし閲覧時に色々と苦労させられます。 そういう意味でサイズ0の構造を丸々とコピーしたいと考えています。 また何かありましたらご回答いただけると助かります、 どうもありがとうございました。