ラベル x の投稿を表示しています。 すべての投稿を表示
ラベル x の投稿を表示しています。 すべての投稿を表示

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)




xステートメント(xコマンド)でファイルのコピー

外部ファイルをコピーするxコマンドについてよく忘れるので自分のためにメモです。
xコマンドはSASからOSにお願いをして、指定の命令を実行してもらうような機能です。
options noxwait;をつけないとコマンドプロンプトの黒画面が残ります。


options noxwait; 

x 'copy "D:\sample\AA.xlsx" "D:\sample\BB.xlsx"';

AAというエクセルファイルをコピーしてBBというエクセルファイルを作成します。

例えばアンケート調査をする時なんかに
まず、コピー元になるひな型アンケートフォームをエクセルで作って、
必要なexcel関数式や入力規則、名前の定義を指定しておきます。

そしてそれをlibnameで読み込むプログラムを書きます。

xコマンドをうまくマクロループで利用して、調査ID分、ひな型ファイルをコピーしまくる。

アンケートをばらまく→エクセルに記入してもらってそのファイルを回収
→読み込むプログラムをマクロループで繰り返して全部いっぺんにデータセット化みたいな風にすると、入力業務が省け、読み込みエラーも少なく、楽だと思います。
エクセルファイルをアクティブにせずにアクセスできるので、実行速度的にDDEより早いはずです。

ファイルの場所や名前にマクロ変数を入れる場合、クォート周りに要注意。

x "%str(copy %"&PATH.\BASE.xlsx%" %"&PATH.\COPYOUT.xlsx%" )";