HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0225
ニボッシーdir_cmdlineでスペースを含むファイル名の取得方法6解決


ニボッシー

リンク

2016/2/25(Thu) 21:58:37|NO.74701

最近色々アイデアが浮かんで作りたいものがあって度々質問すみません。
dir_cmdlineを使った処理なのですが、複数ファイルをexeファイルにD&Dして
ファイル名を取得する時、
ファイル名1.txt ファイル名2.txt
のようにファイルの区切りに半角スペースになるので、
半角スペースを改行に置き換えてnotegetで取得しています。


notesel command command=dir_cmdline strrep command," ","\n" noteget file1,0 : noteget file2,1 mes file1 : mes file2

しかしファイル名に半角スペースが含まれていると、
ファイル名の半角スペースも改行に置き換えてしまうため、
いい方法はないかなと思い質問させて頂きました。

半角スペースがある場合は"C:\ファイル 名1.txt"のように
ダブルクオーテーション(")で囲まれるので
ダブルクオーテーション以外の半角スペースのみ置き換える事が出来れば
出来ると思いますがそんな命令はないですよね?



この記事に返信する


inovia

リンク

2016/2/25(Thu) 23:00:46|NO.74702

昔作ったもので良ければどうぞ
https://msdn.microsoft.com/ja-jp/library/ff770599.aspx

#module #uselib "msvcrt" #func __getmainargs "__getmainargs" int, int, int, int, int #defcfunc getCommandLines sdim result : notesel result argc = 0 : argv = 0 : enpv = 0 : si = 0 __getmainargs varptr(argc), varptr(argv), varptr(enpv), 1, varptr(si) if stat == 0 { #ifdef _debug start = 2 #else start = 1 #endif max = argc - start if 0 < max && argv != 0 { repeat max, start dupptr ptr, argv + (4 * cnt), 4, 4 if ptr == 0 : continue dupptr s, ptr, 1, 2 noteadd s loop } } noteunsel return result #global mes getCommandLines()



ニボッシー

リンク

2016/2/25(Thu) 23:03:02|NO.74703

>inoviaさん
ありがとうございます!
仕組みはどうなっているのかは理解出来ていませんがすごく使いやすいです!
コマンドラインを使ったツールの作成が楽しくなりそうです。
やっぱり標準命令では出来ないのですね



inovia

リンク

2016/2/25(Thu) 23:07:41|NO.74704

あ、コマンドライン引数のワイルドカード展開機能が有効になっているので
不要であれば __getmainargs の第4引数を 0 にしてください。

__getmainargs varptr(argc), varptr(argv), varptr(enpv), 0, varptr(si)



ニボッシー

リンク

2016/2/26(Fri) 00:33:03|NO.74708

>inoviaさん
分かりました。
わざわざありがとうございます。



kanamaru

リンク

2016/2/26(Fri) 07:45:55|NO.74709

「ちょっとしたソースコードを投稿するスレ」で投稿した、
dir_cmdlineの改造版と合体させてみました。
よければ使ってください。

#module dircmd #uselib "msvcrt" #func __getmainargs "__getmainargs" int, int, int, int, int #defcfunc getCommandLines sdim result : notesel result argc = 0 : argv = 0 : enpv = 0 : si = 0 __getmainargs varptr(argc), varptr(argv), varptr(enpv), 0, varptr(si) if stat == 0 { #ifdef _debug start = 2 #else start = 1 #endif max = argc - start if 0 < max && argv != 0 { repeat max, start dupptr ptr, argv + (4 * cnt), 4, 4 if ptr == 0 : continue dupptr s, ptr, 1, 2 noteadd s loop } } noteunsel return result #defcfunc local getcmdline int num re = getCommandLines() split re,"\n",cmd2 if(length(cmd2)<num+1){ dialog "存在しないコマンドラインパラメータです。",1,"エラー" end } return cmd2(num) #global #undef dir_cmdline #define dir_cmdline getcmdline@dircmd mes dir_cmdline(0)



ニボッシー

リンク

2016/2/27(Sat) 21:25:15|NO.74720

>kanamaruさん
ありがとうございます。
試してみたのですが、複数ファイルのD&Dに対応してないようで
1つ目のファイルしか認識しませんでした。
申し訳ありませんが今回の用途は複数ファイルを扱いたかったので
inoviaさんのソースを使うことにします。



ONION software Copyright 1997-2023(c) All rights reserved.