xコマンドで、フォルダ構造のみコピーする話

3/14の電王戦第一局抽選あったたので六本木に見に行ってきます!
このブログ見ていて、もし来られる方がいれば連絡ください!

はい、本題が終わったので、SASの話もちらっと。

Windows環境でコマンドプロンプト使いこなしてると、色々できていいですよね。
僕はさっぱりです。

なんかやりたい時はググってSASのxコマンドにペタッと貼って実行してます。
その中で、ちょっと変わった処理だけど意外と使うな~ってものをご紹介します。

それは、指定したフォルダ内のファイルは無視して、フォルダ構造のみをコピーするというものです。
例えば、ルーチンでやる業務で、前回と同じフォルダが欲しいけど、中に入ってるファイルは別に要らないよというケースです。

一応マクロにしていますが、適当なのでよしなにカスタマイズしてください


/*-----------------------------------------------------------
フォルダ構造のみコピー
※コピー元のフォルダ内のファイルは無視して構造のみをコピー
------------------------------------------------------------*/
%macro folder_emp_copy(basein=,copyout=);
options noxwait noxsync;
%unquote(%bquote(x 'xcopy /t /e "&basein." "&copyout."'));
%mend folder_emp_copy;

/*実行例:デスクトップのTEST1フォルダ内のフォルダ構造をTEST2フォルダ内にコピー*/
%folder_emp_copy(basein=C:\Users\SASYAMA\Desktop\TEST1,
copyout=C:\Users\SASYAMA\Desktop\TEST2)


ついでに、単純に1ファイルをコピーしてリネームするのも

/*--------------------------------------
単一ファイルのリネームコピー
---------------------------------------*/
%macro filecopy(basein=,copyout=);
options noxwait noxsync;
%unquote(%bquote(x 'copy "&basein" "&copyout"'));
%mend filecopy;

/*実行例:AA.txtをBB.txtという名前にリネームしてコピー*/
%filecopy(basein=C:\Users\SASYAMA\Desktop\TEST1\AA.txt,
copyout=C:\Users\SASYAMA\Desktop\TEST2\BB.txt)




3 件のコメント:

  1. フォルダ構造のみコピー機能はいつかはと思っていたのですが、フォルダ毎コピーして中身を消してとりあえず前に進んでいました。急場しのぎでしたので、なんか幸せです。

    ひとつ質問ですが、マクロを実行したところ「・・・は受け側のファイル名ですか、またはディレクトリー名ですか」と聞いてきます。(Windows 7)

    これを出さなくするには、どうすればいいのでしょう?

    返信削除
  2. そうですね例のマクロは、コピー先について、記事の例でいうとTEST2が存在している状況で使うことを想定したマクロなんですね。なので、copyout=の最下層がない状態で実行すると、そうなると思います。なので、最下層に存在しているフォルダを指定すれば、恐らくでないはずです。

    返信削除
  3. なるほど。
    ということで、前に
    %unquote(%bquote(x 'mkdir "&copyout."'));
    を追加して先にフォルダを作成することで、回避することができました。
    ありがとうございました!

    返信削除