-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile_recursive.mac
65 lines (54 loc) · 1.85 KB
/
file_recursive.mac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*カレントディレクトリ以下のファイル候補
*/
#g_dll_hm_process=val(getarg(29));
#g_dll_ohtorii_tools=val(getarg(30));
$label=getarg(0);
$arg1=getarg(1);
$arg2=getarg(2);
$arg3=getarg(3);
$arg4=getarg(4);
$arg5=getarg(5);
$g_root_macro_directory =dllfuncstrw(#g_dll_ohtorii_tools,"StaticStatusGetRootMacroDirectory");
$g_current_working_directory=dllfuncstrw(#g_dll_ohtorii_tools,"StaticStatusGetCurrentWorkingDirectory");
call $label, $arg1, $arg2, $arg3, $arg4, $arg5;
endmacro $$return;
gather_candidates:
$$root_dir=$$1;
if($$root_dir==""){
//カレントディレクトリを使用する
$$root_dir=".";
}
execmacro $g_root_macro_directory+"\\internal\\create_temp_file.mac", "filerec", ".tsv";
$$temp_filename=getresultex(-1);
if($$temp_filename==""){
return "";
}
##ret=dllfuncw(#g_dll_ohtorii_tools,"FileRegistAfterDeleteFile",$$temp_filename);
if(! ##ret){
return "";
}
/* memo
\で終端しているディレクトリ名をダブルクォーテーションで囲ってコマンドライン引数で渡すときの対策。
*/
call remove_terminate $$root_dir;
$$root_dir=$$return;
$$exe=$g_root_macro_directory+R"(\internal\bin\file_searcher.exe)";
$$args = sprintf(R"(--output "%s" --mode file --working_directory "%s" --path "%s" --delay %d)",$$temp_filename,$g_current_working_directory,$$root_dir,0);
##handle=dllfuncw(#g_dll_hm_process,"SpawnWithRedirect",$$exe,$$args,true,true);
##ret=dllfuncw(#g_dll_hm_process,"SetCreateNoWindow",##handle,true);
##ret=dllfuncw(#g_dll_hm_process,"Start",##handle);
if(##ret==0){
return "";
}
return $$temp_filename;
remove_terminate:
/*ディレクトリ名終端の \/ を取り除く
(変換の例)
"c:temp\" -> "c:\temp"
"c:temp/" -> "c:\temp"
*/
$$last=rightstr($$1,1);
if(($$last=="\\") || ($$last=="/")){
return leftstr($$1,strlen($$1)-1);
}
return $$1;