dirコマンドで再解析ポイントを処理対象から除外する方法

このQ&Aのポイント
  • コマンドプロンプトのdirコマンドを使用して再解析ポイントを処理対象から除外する方法について説明します。
  • dirコマンドには再解析ポイント(<JUNCTION>という属性が付いているフォルダやファイル)が含まれないようにするためのオプションがあります。
  • 具体的には、dirコマンドに/a:-lオプションを付けることで再解析ポイントを表示せず、/sオプションを付けることで再帰的にサーチして表示することができます。
回答を見る
  • ベストアンサー

dir /s で再解析ポイントが含めないようにする

こんにちは。 コマンドプロンプトのdirコマンドで、、/a:-l というオプションを付けると、 出力されるファイルやフォルダの一覧に、再解析ポイントは含まれません。 再解析ポイントとは、dirコマンドを実行した時に <JUNCTION>という属性が付いているもので、ジャンクションとも呼ばれます。 WindowsVistaやWinodws7の場合、例えば、 C:\Users\ユーザー名\My documentsやC:\Users\ユーザー名\SendToなどが、 再解析ポイントとして存在しています。 これらは、C:\Users\ユーザー名 で、dir /a:l というコマンドを実行すると、確認する事ができます。 dirコマンドには、ディレクトリを再帰的にサーチして表示するために、 /sオプションが用意されています。 dir /a:-l というコマンドでは、再解析ポイントは表示されないのですが、 dir /a:-l /s というコマンドだと、再解析ポイントまで、処理対象になってしまいます。 では、dir /s を使う時に、再解析ポイントを処理対象に含めないようにするには、 一体どうすればよいのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

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

  • ベストアンサー
回答No.1

ご指摘の内容を100%理解しているわけではないが、試したところ、 dir /s /a:-l でお望みの事ができたような気がするが、どう? コマンドオプションに大抵順番はないのが通常だが、たまに効く場合もある。試す価値はあります(効くように作りこむのが面倒だから)。 もし、上記で違うのであれば、for、forfiles, http://windows.microsoft.com/ja-JP/windows-vista/Command-line-reference-for-IT-Pros などでまず、フォルダー階層を取得し、そのパスから、dir /a:-l を実行すればいい。 for /r %a in (.) do

MetalLover
質問者

お礼

御回答ありがとうございます。 for /r %a in (.) do( ・・・ ) で、何とか再解析ポイントを回避しようとしたのですが、 無理でした。 別の方法を考えます。

関連するQ&A

  • 再解析ポイントについて(Windows7)

    こんにちは。 OSは現在、32bit版のWindowsVista(SP2)と、64bit版のWindows7を使っています。 Windows7では、ホームディレクトリなどに、いくつかの再解析ポイントが、 あらかじめ作成されています。 例えば、ホームディレクトリ直下のマイドキュメントには、 以下のような3つの再解析ポイントがありました。 -------------------------------------------------------------------------- >dir /al documents ドライブ C のボリューム ラベルは Windows 7 です ボリューム シリアル番号は D69A-D5E5 です C:\Users\Kei\documents のディレクトリ 2011/06/11 18:46 <JUNCTION> My Music [C:\Users\Kei\Music] 2011/06/11 18:46 <JUNCTION> My Pictures [C:\Users\Kei\Pictures] 2011/06/11 18:46 <JUNCTION> My Videos [C:\Users\Kei\Videos] 0 個のファイル 0 バイト 3 個のディレクトリ 523,493,568,512 バイトの空き領域 --------------------------------------------------------------------------- エクスプローラ上で、ドラッグアンドロップによって、再解析ポイントを含むフォルダをコピーした場合、コピー先では、それらの再解析ポイントは、空のフォルダになっていました。 一方、robocopyコマンドによって、再解析ポイントをコピーすると、リンク先のフォルダ以下にあるファイルやフォルダが、そのままコピーされてしまいます。 例えば、robocopyコマンドによって、マイドキュメントをUSBメモリにコピーすると、コピー先のマイドキュメントの直下に、 C:\Users\Kei\Music C:\Users\Kei\Pictures C:\Users\Kei\Videos がそのままコピーされてしまいました。 いずれにせよ、再解析ポイントを、そのままの形で、他の場所にコピーする事はできませんでした。 (FireFileCopyというフリーソフトを使えば、コピー元のマイドキュメントに含まれる再解析ポイントが、そのままの形でコピーされましたが・・・) 何かすごくややこしいので、再解析ポイントを全て削除したいと思っているのですが、 ホームディレクトリには、以下のように、重要なフォルダへの再解析ポイントが存在しています。 --------------------------------------------------------------------------- >dir /al ドライブ C のボリューム ラベルは Windows 7 です ボリューム シリアル番号は D69A-D5E5 です C:\Users\Kei のディレクトリ 2011/06/11 18:46 <JUNCTION> Application Data [C:\Users\Kei\AppData\Roami ng] 2011/06/11 18:46 <JUNCTION> Cookies [C:\Users\Kei\AppData\Roaming\Micros oft\Windows\Cookies] 2011/06/11 18:46 <JUNCTION> Local Settings [C:\Users\Kei\AppData\Local] 2011/06/11 18:46 <JUNCTION> NetHood [C:\Users\Kei\AppData\Roaming\Micros oft\Windows\Network Shortcuts] 2011/06/11 18:46 <JUNCTION> PrintHood [C:\Users\Kei\AppData\Roaming\Micr osoft\Windows\Printer Shortcuts] 2011/06/11 18:46 <JUNCTION> Recent [C:\Users\Kei\AppData\Roaming\Microso ft\Windows\Recent] 2011/06/11 18:46 <JUNCTION> SendTo [C:\Users\Kei\AppData\Roaming\Microso ft\Windows\SendTo] 2011/06/11 18:46 <JUNCTION> Templates [C:\Users\Kei\AppData\Roaming\Micr osoft\Windows\Templates] 2011/06/11 18:46 <JUNCTION> スタート メニュー [C:\Users\Kei\AppData\Roam ing\Microsoft\Windows\Start Menu] 0 個のファイル 0 バイト 9 個のディレクトリ 395,807,387,648 バイトの空き領域 --------------------------------------------------------------------------- これらのように、元から作成されている再解析ポイントは、削除すると何かまずいことがあるのでしょうか? 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。

  • コマンド DIRの動作について

    バッチファイルのDIRコマンドでよく分からない事が あるので、ご存知の方、ご教授願います。 あるフォルダ(仮にC:\test\とします。)の中に1行だけ記述された CSVファイルが大量にあります。 これをCOPYコマンドで1ファイルにまとめたいと思います。 しかし、そのフォルダの中にはサブディレクトリがあり、その中にも COPYコマンドの対象としたいCSVファイルがあります。 COPYコマンドはサブディレクトリまで処理対象としてくれない ようですし、サブディレクトリの数は不特定なので、どうしょうかと 困っていたら、あるWebページを見つけました。 ttp://www.fpcu.jp/dosvcmd/bbs/log/copyxcopy/4-1567.html やりたい事はまさにドンピシャで、そのページのコマンドを 自分流に書き換えつつ、完成したのが、以下のコードです。 MKDIR "C:\test2\" XCOPY "C:\test\*.csv" "C:\test2\" /E /Y for /f %%a in ('dir "C:\test\" /b') do XCOPY "C:\test\\%%a\*.csv" "C:\test2\" /E /Y COPY "C:\test2\*.csv" "C:\test2\log.csv" ※変な所で改行が入って見難くなっていたらゴメンナサイ。 上記、コードで試してみた所、WindowsXPでは問題なく動作しました。 しかし、Windows2000で試してみた所、うまく動きませんでした。 PAUSEコマンドを入れて、どんなコマンドが吐かれているのか見たら サブディレクトリを動的に変えようとしてい%%aの中に「ドライブ」 とか「ボリューム」とか入ってくるのです。最初は意味不明でしたが DIRのbオプションを付けない時に、そういう文字がコマンドプロンプト の画面に表示され、それを取得しているんじゃないかという事に 気づきました。ちなみにWindows2000でもDIR C:\test /bとやると フォルダ名、ファイル名しかコマンドプロンプトの画面には表示されません。 気づいたはいいんですが、解決方法が分かりません。 どなたか、コマンドに詳しい方、ご教授ください。 よろしくお願いします。

  • C++ で DIR コマンド

    MS-DOSプロンプトで dir と入力すれば、フォルダ内の 様子がMS-DOSプロンプトに表示されるけど、 C++ で、MS-DOSプロンプトで dir と入力したのと同じ 様にするにはどういうプログラムを作ればいいのですか? 別の言い方で書くと、実行すればMS-DOSプロンプトが 起動し、dir と入力されて dirコマンドが実行される というファイルを作るソースが知りたいんです。 dirコマンドが実行される対象となるディレクトリは どこでもいいんです。 C++ のプログラムでも、ディレクトリ構造を出力することが 出来ると思うんだけど、MS-DOSプロンプトでやってみたいんです。 どうしてそんなことがしたいのかというと、C++ が難しそうだから という理由なんです。 例えば、ファイルコピーを自動化するプログラムを作る時、 C++ のプログラムの出力をMS-DOSプロンプトへ渡す方法を知っていれば、 MS-DOSプロンプトでのコピーは copy コピー元 コピー先 という簡単な書式だから、ファイルコピーを自動化するプログラムも 簡単に作れそうだなと思ったんです。

  • エクセルのVBAからDOSコマンドのDIRを実行したい

    DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • dir /A /B /S *.txtをLinuxで

    Windowsで C:>dir /A /B /S *.txt を実行すると、そのディレクトリ以下の*.txtファイルが C:\abc\def\hij.txt C:\abc\def\klm.txt ... と出力されます。 これをLinux上で出来ないでしょうか。 ネット上で調べたのですが、私の実力では"/S"と同じことがLinuxでは出来ないようです。

  • DOSコマンドでのDIRコピー

    DOSコマンドでdirの階層構造を保持したままあるdirの下階層全てをあるdirの下へコピーするにはどのようにすればいいのでしょうか? 例えば、dir-aの下にdir-b1、dir-b2が存在している場合dir-aを全てdir-c の下へコピーしたいということです。(できれば1コマンドで)

  • コマンドプロンプトの基本

    よろしくお願いします。 目的はお気に入りにはフォルダーがあり、フォルダーも階層があります。ファイルベースで一覧表示したいのです。 コマンドプロンプトで下記を入力すれば、うまいことできるみたいですが、 C:\Users\ユーザ名\Favorites>dir /a-d /s ユーザ名の後に>があり、なかなかうまいこといきません。 https://gyazo.com/757e699f7977e19acaa95bf084037bc5 なんとかしてC:\Users\ユーザ名\Favorites>dir /a-d /sを入力する方法はないでしょうか。

  • dir /a-d/sからほしいデータだけを抽出

    dir /a-d/s >test.txtで保存したデータから下記の情報だけエクセルに表示するためには どうようなVBを作ればよろしいのでしょうか。 yyyy/mm/dd(A列) hh:mm(B列) ファイルサイズ(C列) ファイル名(D列) C:\Users\AA\BBB\Local のディレクトリ 2013/04/15 22:08 36 AAAAA.jpg 2013/05/27 23:59 50,849 BBBBB.jpg 2 個のファイル 50,885 バイト C:\Users\AA\BBB\CCCl\DD\EEE\ASD のディレクトリ 2013/04/21 21:46 70,195 123.lst 2013/04/21 21:46 163,659 10.lst 2013/04/21 21:46 123,818 Fnt10.lst 2013/05/27 23:53 3,072 Events 2013/04/21 21:55 75,803 1.bin 5 個のファイル 436,547 バイト

  • dirコマンドを実行して、結果を表示するJavaプログラム(プログラム

    dirコマンドを実行して、結果を表示するJavaプログラム(プログラムは一番下に)なのですが このプログラムをfor文でfor(int i=0;i<=13;i++)とこのように やったら、以下のような結果になったのですが //実行結果 ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は xxxx-xxxx です C:\Users\z\zw\zww(1) のディレクトリ 2010/10/19 11:11 <DIR> . 2010/10/19 11:11 <DIR> .. 2010/10/19 11:11 301 .classpath 2010/10/19 11:11 381 .project 2010/10/19 11:11 <DIR> .settings 2010/10/19 11:16 <DIR> bin 2010/10/19 11:16 <DIR> src 2 個のファイル 682 バイト 5 個のディレクトリ 48,884,387,840 バイトの空き領域 //実行結果ここまで これをwhileで while(true){ if(a.getLine()==null){ break; } System.out.println(a.getLine()); } というようにやると以下のような実行結果になって、for文と同じ結果になるのが正 しい結果だと思うのですがなりませんでした。ループを抜けるために、break文をや ったのですが、自分が考えた条件は、getLine()メソッドは読み込む行が無くなった ら、nullを返すので、a.getLineがnullと同じになったらbreakをするという風に自 分ではしたつもりなのですが、条件が違うのかfor文のような結果が出ませんでした。 whileの場合なぜこのような結果になってしまったのかわからなく、 手詰まりになってしまったので、どなたかご教授ください 実行結果 ボリューム シリアル番号は xxxx-xxxx です C:\Users\z\zw\zww(1) のディレクトリ 2010/10/19 11:11 <DIR> . 2010/10/19 11:11 301 .classpath 2010/10/19 11:11 <DIR> .settings 2010/10/19 11:16 <DIR> src 5 個のディレクトリ 48,886,591,488 バイトの空き領域 実行結果ここまで //プログラム import java.io.*; class DirCmd{ BufferedReader br; DirCmd(){//コンストラクタの定義(dirコマンドをここで実行) try{ Process p = Runtime.getRuntime().exec("cmd /c dir"); InputStream is = p.getInputStream(); br = new BufferedReader(new InputStreamReader(is)); }catch(IOException e){} } public String getLine(){//dirコマンドの実行結果の一行を読む String line = null;// 読み込む行が無くなったらnullを返す try{ line = br.readLine(); }catch(IOException e){} return(line); } public static void main(String [] args){ DirCmd a = new DirCmd(); while(true){ if(a.getLine()== null){ break; } System.out.println(a.getLine());     } } }

    • ベストアンサー
    • Java
  • C言語 コマンドラインの文字列を調べる方法

    はじめまして。 C言語を学習しています。 PCのOSはWindows XPです。 参考書に、アプリケーションの動作を指定するオプションを指定する方法として、下記の説明とプログラムが載っています。 以下の点でつまづいており、ご教示をお願い致します。 1、プログラム実行結果画面(コマンドプロンプトのような黒い画面。スクリーンショットを添付しております。)に【-a】と入力しようとしましたが、テンキーの【-】を押した時点で画面が消えてしまいます。 どのように操作すれば、参考書のような実行結果が得られるのでしょうか。 2、【argc--;】の部分で、ここでなぜデクリメントを使うのでしょうか。 3、argvは文字配列へのポインタ変数とのことですが、if文のところの【argv[argc][0]】が何を意味しているのか教えてください。 argv[配列の要素]のような書き方ではなく、argvの横に[]が2つある時点で混乱してしまいます。 どうかよろしくお願い致します。 ●参考書による説明 一般的に、コマンドラインにはファイル名の他に、アプリケーションの動作を指定するオプションを指定することがあります。 例えば、Windowsでファイル名を指定して実行で defrag と指定して起動すると、デフラグが起動して何もせずに終了しますが、 defrag c: と指定すると、Cドライブのデフラグを開始します。 また、defrag c: -a と指定すると、Cドライブの分析結果だけを表示します。 このような使い方は、パソコン上級者にはおなじみのやり方です。 この例では、 c: と -a という2つの文字列がコマンドラインに渡され、それをアプリケーション内で解析して、動作を決定しています。 同様のことは、コマンドラインの文字列を調べれば簡単にわかります。 ここでは、-a と -s というオプションの有無を解析する例です。 ●プログラム #include <stdio.h> int main(int argc,char *argv[]) { while (argc > 0) { argc--; if (argv[argc][0] == '-') { if (argv[argc][1] == 'a') printf("-a オプション\n"); if (argv[argc][1] == 's') printf("-s オプション\n"); } } return 0; } このプログラムに -a -s というオプションを与えて実行した結果は次の通りです。 -a オプション -s オプション 同様にすれば、いくつのオプションにでも対応することができます。 また、先頭が - ではない文字列をファイル名として扱うようにすれば、 ファイル名も前項と同様に取得することができます。

専門家に質問してみよう