お前ら、wsh使ってますか? Part7at WIN
お前ら、wsh使ってますか? Part7 - 暇つぶし2ch693:名無し~3.EXE
09/11/23 11:22:05 1SNAy8LO
「VBAみたいに『Is > 0』って書ければ良かったのに」って
>>688は言いたいんじゃないの?

694:名無し~3.EXE
09/11/23 19:28:11 8m8LyL5s
a = 1
Select Case a
Case a > 0
MsgBox "引っかからない"
Case Else
End Select

ってことだろ
VBSはIsもToもサポートしてない


695:名無し~3.EXE
09/11/23 19:36:49 8m8LyL5s
Is > 0 だった



696:名無し~3.EXE
09/11/25 14:37:08 vRBOSPMC
エクスプローラの"ファイル名でソート"と同じ規則でソートする方法はありませんか
エクスプローラの表示だと
 あ,txt
 ア,txt
 い,txt
 イ,txt
wshでファイルリストを出力すると
 あ,txt
 い,txt
 ア,txt
 イ,txt
となってしまいます

697:名無し~3.EXE
09/11/25 14:45:05 QJTE9W/a
URLリンク(scripting.cocolog-nifty.com)

698:名無し~3.EXE
09/11/25 23:51:49 vRBOSPMC
>697にある三番目のスクリプトをJscriptに書き換えたけどうまく動きません。添削をお願いします。
for文のループが実行されません。

FolderName="フルパス";
var fso=new ActiveXObject("Scripting.FileSystemObject");
var ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}");
ie.Navigate(FolderName);
do {WScript.Sleep(100);} while ((ie.Busy) || (ie.ReadyState!=4));
var Folder=ie.Document.Folder;
for (var i=0; i < Folder.Count; i++){
var FolderItem=Folder.Items(i);
if (FolderItem.Type=="ファイル フォルダ"){
if(toLowerCase(fso.GetExtensionName(FolderItem.Path))=="txt"){
WScript.Echo(fso.GetFileName(FolderItem.Path));
}
}
}
//ie.Quit;//エラーが出る

699:名無し~3.EXE
09/11/25 23:59:57 TDrkyoKp
Document.Folderで手に入るのがコレ
URLリンク(msdn.microsoft.com)
Countというプロパティは無い
Itemsメソッドは引数を取らない

700:名無し~3.EXE
09/11/26 00:46:36 O7jscl7L
プロパティとメソッドの区別がついてないんじゃないの?

701:名無し~3.EXE
09/11/26 21:57:55 N/S5kwhR
本質的な違いはない

702:名無し~3.EXE
09/11/27 00:40:22 ZUJwRQCx
//ie.Quit;//エラーが出るだろぼけ

703:名無し~3.EXE
09/11/28 23:53:27 oniuazYX
だまれクズ豚

704:名無し~3.EXE
09/11/29 13:26:33 0uSg2Cxv
VBScriptとJScriptの区別がついてないんじゃないの?

705:名無し~3.EXE
09/11/29 20:55:52 0uSg2Cxv
シンタクス以外に本質的な違いはない

706:名無し~3.EXE
09/11/30 18:37:23 xUEhOJNz
動詞と名詞の区別がついてないんじゃないの?


707:名無し~3.EXE
09/12/01 22:01:40 yDXwDcOy
Cscriptで起動したスクリプトからコンソールアプリケーションを起動した場合に
その標準出力をスクリプトで受け取るような事ってどうやっても無理なんでしょうか?

708:名無し~3.EXE
09/12/01 22:11:59 lsMwusSy
>>707
関係ないけどWindows3.1のころは「ヘルプのヘルプ」ってのがあった。
最近は初心者切捨てでかわいそうだね。

709:名無し~3.EXE
09/12/01 22:12:48 HwFSNddt
どうやってもってなんか極めて困難かであるかのように
WshScriptExec使えばいいっしょ

710:名無し~3.EXE
09/12/01 22:13:19 WdXqZ7eU
>>708
いまだにPC初心者っているんだな。全国民に行き渡ったと思ってたぜ。

711:名無し~3.EXE
09/12/01 23:45:51 bXIPT5f9
誰に教わるでもなくいきなり車ができたり
英語が話せたり
そんなすごい人がいたら教えてください

712:名無し~3.EXE
09/12/02 10:56:22 ZUy7XsN4
単数と複数の区別がついてないんじゃないの?

713:名無し~3.EXE
09/12/03 16:49:20 rN3MSJ1f
hta アプリケーションのウインドウに、ファイルのドラッグドロップって出来ましたっけ?
ドラッグドロップしたファイルのパスをhtaで利用したいんですが。
可能ならどうやってイベントを拾えばいいですか?。

714:名無し~3.EXE
09/12/03 20:44:12 ThJuUPaj
すれっち
スレリンク(tech板)

715:名無し~3.EXE
09/12/05 17:35:36 /VdO4Ha3
XPとWScriptのJscriptで、manifest使ってレジストリ登録なしでAutoItXが使えたんでメモしとく。
まずWScript.ExeとCScript.Exeをコピーして適当なフォルダに入れとく。
AutoItX3.dllも同じところに入れとく。
同じ場所にテキストファイルを3つ作る。
wscript.exe.manifest
cscript.exe.manifest
AutoIt.AutoItX3.manifest

716:名無し~3.EXE
09/12/05 17:36:31 /VdO4Ha3
AutoIt.AutoItX3.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.AutoItX3"
type="win32"
/>
<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>
</assembly>

717:名無し~3.EXE
09/12/05 17:37:29 /VdO4Ha3
wscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.wscript.exe"
type="win32"
/>

<description>WScript.exe</description>

<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="AutoIt.AutoItX3"
version="1.0.0.1"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
</assembly>


718:名無し~3.EXE
09/12/05 17:38:19 /VdO4Ha3
cscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.cscript.exe"
type="win32"
/>

<description>WScript.exe</description>

<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="AutoIt.AutoItX3"
version="1.0.0.1"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
</assembly>

719:名無し~3.EXE
09/12/05 17:43:52 /VdO4Ha3
// この test.js をコピーしたWScript.exeにドラッグして実行させると、画面の中央にツールチップが現れるはず。
// スクリプト起動時にこっちのWScript.Exeを選ぶスクリプト書いておけば、ポータブルでもAutoItXの機能が使える。

oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );

oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);

WScript.Echo(100);

oAutoIt.Sleep(3000);

WScript.Echo(200);

720:名無し~3.EXE
09/12/05 18:51:16 /VdO4Ha3
マニュフェストは下のように1つにまとめても動いたわw。分けなくてもよかったようだ。
wscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" />
<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>
</assembly>

721:名無し~3.EXE
09/12/05 19:26:28 /VdO4Ha3
// sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest.js

var s="cscript.exe.manifest と Cscript.Exe と \n";
s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n";
s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n";
s+=" 無ければ、このスクリプトは一旦終了し、\n";
s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。";
new ActiveXObject("WScript.Shell").Popup(s,0,'test',0);

var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;;
try{oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );}catch(e){
new ActiveXObject('WScript.Shell').Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName)
+ "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;;
WScript.Quit();};

oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);

var n=3000;

WScript.Echo("AutoItXのSleepを使ってみる " + n + " ミリ秒");

oAutoIt.Sleep(n);

WScript.Echo(3000);

oAutoIt.Sleep(3000);

722:名無し~3.EXE
09/12/05 23:46:56 /VdO4Ha3
とりあえず、ポータブルのJScriptでもAutoItXでアプリ制御、SeraphyScriptDialogでGUIフォーム、SFCminiでWin32API、いくつかは動いたんで最後のまとめ。 cscript.exe.manifest の中身。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="cscript.exe" version="1.0.0.0" type="win32" />

<file name="scrdlg.dll">
<comClass clsid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" threadingModel="Apartment" tlbid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" progid="SeraphyScriptDialog" description="scrdlg Class" />
</file>

<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>

723:名無し~3.EXE
09/12/05 23:48:35 /VdO4Ha3
つづき、AMD は sfcminii.dll を sfcminia.dll に変える。

<file name="sfcminii.dll">
<comClass clsid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" threadingModel="Apartment" tlbid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" progid="SfcMini.DynaCall" description="sfcminii Class" />

<comClass clsid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" threadingModel="Apartment" tlbid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" progid="SfcMini.Structure" description="sfcminii Class" />

<comClass clsid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" threadingModel="Apartment" tlbid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" progid="SfcMini.MachineCode" description="sfcminii Class" />

<comClass clsid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" threadingModel="Apartment" tlbid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" progid="SfcMini.ClassEx" description="sfcminii Class" />

<comClass clsid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" threadingModel="Apartment" tlbid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" progid="SfcMini.tools" description="sfcminii Class" />
</file>
</assembly>

724:名無し~3.EXE
09/12/07 00:20:21 nBnCs4W2
//やべえ。銚子に乗って書いたが、設定がうまく遺憾人は無限ループになる可能性がある。
//1回で打ち切りにするテスト用スクリプトをカキコ。スマン。

// sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest無限ループ回避.js

var s="cscript.exe.manifest と Cscript.Exe と \n";
s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n";
s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n";
s+=" 無ければ、このスクリプトは一旦終了し、\n";
s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。";

var objshl=new ActiveXObject('WScript.Shell');
if(objshl.Environment('process').item('senvstopscript')!=1){
try{oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' );}catch(e){
objshl.Popup("この後RUNする\n\n"+s,0,'test',0);
var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;;
objshl.Environment('process').item('senvstopscript')=1;
objshl.Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName)+ "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;;
WScript.Quit();};
};
WScript.Echo(s,0,'test',0);
WScript.Sleep(2000);
oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' );
var n=3000;
oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500);
oAutoIt.Sleep(n);

725:名無し~3.EXE
09/12/07 01:28:35 WsLj3zGr
ウチでも動いた。
また入れなおしたけど。

726:名無し~3.EXE
09/12/09 15:51:14 LISCbfE6
面白そうだからPortableSleipnir、LunaPocketでも試したがmanifestでは駄目だった。
でPortableSleipnirでScriptのほうに手を加えて、
起動するときにmanifest付きのwscript.exeから
起動しなおすようにしたらSleipnirやAutoItXのオブジェクトも使えた。
もちPortableはsleipnirからxmlをコピーしてメニューにスクリプトが出るようにしてからだがな。

727:名無し~3.EXE
09/12/09 15:54:58 LISCbfE6
// pWScriptExeでパスを決める。
// もしくはbinフォルダにマニフェストとDLL、exeを入れる。
objfso=new ActiveXObject("Scripting.FileSystemObject");
objshl=new ActiveXObject("WScript.Shell");
pnir = new ActiveXObject("Sleipnir.API");

if(objshl.Environment("process").item("senvstopscript")!=1){
//wscript.exeのパスを決め内する場合
pWScriptExe="U:\\wscript.exe";
//もしbinフォルダにwscript.exeがあればそれを使う。
if(objfso.FileExists(pnir.AppPath + "wscript.exe")){
pWScriptExe=pnir.AppPath + "wscript.exe";
};
objshl.Environment("process").item("senvstopscript")=1;
objshl.Run("\"" + pWScriptExe + "\"" + " //E:Jscript //nologo " + "\"" + WSH.ScriptFullName + "\"" ,1,0);;;
WScript.Quit();
}

str = pnir.AddressBarString;
str+="\n"+pnir.AppPath;
WScript.Echo(str);
WScript.Echo("test");
WScript.Sleep(2000);

oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );
var n=3000;
oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500);
oAutoIt.Sleep(n);

728:名無し~3.EXE
09/12/09 19:38:19 vX1/pBxQ
Luna4Pocket、 PortableSleipnir、 どっちでも外部のDLLは使える。
Luna.exeと同じ場所に、wscript.exe、 wscript.exe.manifest、 AutoItX3.dll、 etc dll を
置いておけばこっちの wscript.exe を優先するんで Dll も動く。

729:名無し~3.EXE
09/12/09 22:39:03 Yhsi9HCt
いつの間にかJScriptのファイルのアイコンが白地に箱のアイコン
になってたんですが、デフォルトの黄色のパンチカード?のアイコンに戻し
たいです
どうしたらいいですか?

プロパティの関連付けを確認すると「Console Based Script Host」に
なってるんで関連付けは間違っていないと思います。

730:名無し~3.EXE
09/12/09 22:53:17 5hilr/mv
普通Console Based(cscript.exe)じゃなくてWindows Based(wscript.exe)に関連づけられてるはずだが?

731:名無し~3.EXE
09/12/10 13:50:34 Mq0kj3tj
regsvr32 wshext.dll

732:名無し~3.EXE
09/12/11 19:38:39 sMPK5/7s
どうでもいいが、むだ口さんの掲示板が宣伝ばっかりだ。

733:名無し~3.EXE
09/12/12 19:42:43 ZndgYDwX
生活かかってんだろ?買ってやれよ

734:名無し~3.EXE
09/12/15 00:57:14 XWk31MKA
wscript.exe.manifest basp21.dll capicom.dllの一部が動きました。全部試してません。
ポータブル環境やエディタでの暗号処理も簡単そうです。
URLリンク(www.microsoft.com)
msi を解凍すればcapicom.dll が入手できます。
msiexec /a capicom_dc_sdk.msi targetdir="z:\hogehoge" /qn

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" />

<file name="capicom.dll">
<typelib tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" version="1.0" helpdir="" />
<comClass clsid="{A440BD76-CFE1-4D46-AB1F-15F238437A3D}" threadingModel="Apartment" tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" progid="CAPICOM.EncryptedData.1" description="CAPICOM.EncryptedData Class" />
</file>

<file name="Basp21.dll">
<typelib tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" version="1.0" helpdir="" />
<comClass clsid="{5A99A823-3B97-11D1-863C-00000E4E0AD6}" threadingModel="Apartment" tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" progid="Basp21.1" description="Basp21 Class" />
</file>

735:名無し~3.EXE
09/12/15 01:10:52 XWk31MKA
objBasp=new ActiveXObject('basp21.1');
sOriginal='basp21.1こんばんは';
sEnc = objBasp.Base64(sOriginal,0);
sDec = objBasp.Base64(sEnc,1);
WScript.Echo(sOriginal +"\n"+ sEnc +"\n"+ sDec);

sOriginal = 'CAPICOM.EncryptedData.1こんばんは';
sKey='Password';
objCapicom = new ActiveXObject('CAPICOM.EncryptedData.1');

objCapicom.SetSecret(sKey);
objCapicom.Content = sOriginal;
sEnc = objCapicom.Encrypt().replace(/\s$/,'');
objCapicom.Decrypt(sEnc);
sDec = objCapicom.Content;

WScript.Echo(sOriginal + "\n" + sKey +"\n" + sEnc + "\n" + sDec);

736:名無し~3.EXE
09/12/16 10:27:34 BQc3xGqm
すみません。教えてください。

>cscript.exe hoge.vbs

としてvbsを実行した場合、hoge.vbsで実行時エラーが発生した場合に
cscript.exeが終了コード0以外を返すようにするには
どうしたらよいでしょうか?

よろしくお願いいたします。

737:名無し~3.EXE
09/12/16 12:02:16 0CWXvG5X
WScript.Quit 1

738:名無し~3.EXE
09/12/16 12:35:25 BQc3xGqm
>>737
ありがとうございます。
やはりvbs側の修正が必要なんですね。


739:名無し~3.EXE
09/12/18 00:03:33 hmFH5f4H
on error ?

740:名無し~3.EXE
09/12/18 07:19:38 5pMA288l
こんにちは
テキストファイルから文字列の抽出をしたくて、できる方法を探してます。
やりたいのは
1.アプリケーションA.exeを終了させる
2.B.txtの「通信」という語句がある行の、""に囲まれた文字列を
  抽出し、C.txtの末尾に追加する
3.B.txtの内容を全消去し保存する
4.10秒後にA.exeを再起動する

という作業です。これをWSHでやることは可能でしょうか?
宜しかったら、どういうコマンドを使えばできるかざっとでも教えて頂けないでしょうか?

741:名無し~3.EXE
09/12/18 07:28:48 kF8+V9so
まず服を脱ぎます

742:名無し~3.EXE
09/12/18 07:30:33 Dsca2BJb
次に綿棒を用意します

743:740
09/12/18 11:20:12 5pMA288l
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("A.log")
Set B = fs.OpenTextFile("B.lst", 8, False)

Do Until f.AtEndOfStream
l = f.ReadLine
If InStr(l, "達成") <> 0 then ret = ret & l & vbCrLf
Loop

f.Close
B.Write ret
B.Close

とりあえず、行を抽出することはできたんだけど、行の中の""に囲まれた部分
だけを抽出するにはどうしたらいい?
       ∧__∧
      (´・ω・` )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)

744:740
09/12/18 12:32:41 5pMA288l
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer

Set oProcs = Service.ExecQuery _
("Select * From Win32_Process Where Description=""A.exe""")
For Each oProc In oProcs
oProc.Terminate
Next

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("B.txt")
Set B = fs.OpenTextFile("C.txt", 8, False)

Do Until f.AtEndOfStream
l = f.ReadLine
If InStr(l, "通信") <> 0 then ret = ret & l & vbCrLf
Loop

f.Close
B.Write ret
B.Close
fs.DeleteFile "B.txt"
fs.CreateTextFile "B.txt"

WScript.Sleep 10000

Set shell = WScript.CreateObject("WScript.Shell")
shell.Run "A.exe", 3, true

いろいろつぎはぎしてここまでできたんですが、""の中だけを抽出する方法が分からない...
テキストの内容のクリアの方法も分からなかったので消去+新規作成で代用しました(;^ω^)
""の中だけの抽出はどうやったらいいでしょう?

745:740
09/12/18 15:18:42 5pMA288l
と、思ってたら、できちゃった。。。。
言われたのは「服を脱いで綿棒用意しろ」とだけか。。。。ほんと有益なスレだtったぜwwww

746:名無し~3.EXE
09/12/18 15:42:26 HOC6ISom
用意したんだろ?( ´∀`)σ)Д`)

747:名無し~3.EXE
09/12/18 16:57:51 TYK9wCb8
>>1
はい、使ってます。

748:740
09/12/18 17:48:38 5pMA288l
作ったvbsファイルを直接クリックすると実行できるんですが、
「ファイル名を指定して実行」から、wscript.exe "パス\ファイル名.vbs"
で実行すると、「行17 ファイルが見つかりません 実行時エラー」とかいうのが出てきます。
なんで????(´・ω・`)

749:名無し~3.EXE
09/12/18 18:33:21 JaPpW35G
>>748
カレントディレクトリ


750:740
09/12/19 03:55:38 bRRSIC4A
なるほど~。やっとできたよ~∩(^ω^)∩バンジャーイ

751:名無し~3.EXE
09/12/22 19:28:26 BZ2YAM4c
ファイルを削除したいのに、たまーに「ファイルが見つかりません」とか出る...
ファイルがあるのに「ない」とか出るのは何故なのかな(#^ω^)ピキピキ ...


752:名無し~3.EXE
09/12/22 19:51:16 OXMFkspi
パスが違う・カレントディレクトリが違う

753:名無し~3.EXE
09/12/22 20:13:09 qKuvUzNL
If fso.FileExist(file) Then fso.DeleteFile file

754:名無し~3.EXE
09/12/22 20:28:03 6G2Mlzun
こういう奴がスクリプトでファイル削除して惨事を招くんだろうな。

755:名無し~3.EXE
09/12/22 22:36:45 BZ2YAM4c
WSHの実行履歴ってどっかで見れないかな...
なにやら3つぐらい同時に実行されてるぽい。二重起動防止が役にたってなひよ(-_-) …

756:名無し~3.EXE
09/12/22 22:42:36 qKuvUzNL
wscript.shell logevent

757:名無し~3.EXE
09/12/22 23:28:39 BZ2YAM4c
ありがとん。wshっていろいろできるんだねえ。おもしろくなってきたよ

758:名無し~3.EXE
09/12/23 00:53:33 9A0fdYTt
これ絶対おっさんだよな。

なのに平日(12/18)一日中 2ch してるとか、変な顔文字とか・・・・

759:名無し~3.EXE
09/12/23 03:20:36 +DPP5Qk7
役に立たないくせにつまんない突っ込みばっかりするのなオマエwwwwwwwwwwwwwwww( ゜д゜)、ペッ

760:名無し~3.EXE
09/12/23 08:20:58 OOKcm36S
ニートのキモッサンきめえw

761:名無し~3.EXE
09/12/23 09:12:01 PXJi6MOV
>>759
レベル低すぎ
ここはググって出てくるような事を書き込むスレじゃないんで、お引取りください

762:名無し~3.EXE
09/12/23 15:19:38 HBBFKBYL
>>761
では、レベルの高い話をハイどうぞ↓

763:名無し~3.EXE
09/12/24 14:14:07 i6+2D8Nd
DOSの業務用ソフトをWSHで動かすことはできますか?

764:名無し~3.EXE
09/12/24 14:26:52 6hCJv+1N
バッチファイルの代わりにはなるだろうけど、それ以上は期待するだけ無駄

765:名無し~3.EXE
09/12/24 20:21:32 Q7u0QeqE
WSHからアプリをIntegrity Level Lowで動かすことはできますか?

766:名無し~3.EXE
09/12/24 22:17:35 bSJyJDZo
>>765
プロセスの優先度のことならstart /lowでいいだろ。
WSHでもできないことはないけどWin2000じゃ使えない。

767:名無し~3.EXE
09/12/25 01:13:25 9mIsp81e
>>765
気になったので、ググってみた。何とかなりそうだ。
URLリンク(scripting.cocolog-nifty.com)

768:名無し~3.EXE
09/12/27 23:24:47 j8YGjmed
テキストファイルの最後の2行を読み込みたい場合に
どういうふうに処理するのがスマートんなんでしょうか?

ReadLineで始めの行から
常に二行分を変数に避難させながら最後の行まで読み込む

一度に全部読んでからSplitで分割

最初に一度すべてを読み込んで行数を調べてから
ReadLineで最後の2行まで読み飛ばして取得

と、考えてみたのですがどれもなんか無駄な動きがあるような気がして

769:名無し~3.EXE
09/12/27 23:35:30 Szvprv8w
悩んでる時間とスクリプトの処理時間を天秤にかけて見るといいんじゃないだろうか。

770:名無し~3.EXE
09/12/27 23:40:04 mNLBddrF
現在行の内容を格納する変数(X)と、1個前の行の内容を格納する変数(Y)を用意。
Xの内容をYにコピーしてから新しい行を読む。

771:名無し~3.EXE
09/12/28 00:06:10 r7K75E4h
>>769
実際にはもう問題なく動くスクリプトは作れているんだけど
ふと、使い慣れてる人はもっといい方法とか
細かい処理速度やメモリの使い方?とかの違いとかその辺も考えて
どういう方法が一番いいかとか知ってるんじゃないかな、と思って

>>770
今はちょうどその方法でやってるんですが
最後の2行だけほしいのに、テキストの先頭からずっとその作業をやるのは
最善の方法なのだろうか?と不安になってしまって

772:名無し~3.EXE
09/12/28 00:17:00 0M12J26z
全然試しもしないで想像だけで書いてるけど
同じテキストファイルを2つのオブジェクトとして開いて
片方を一回だけSkipLineで先行させてからループで先行してる方のAtEndOfLineがtrueになるまで
SkipLineで飛ばすとか。

773:名無し~3.EXE
09/12/28 00:19:26 KqC6OI6J
実行行数が少ないほうが速いよ。

774:名無し~3.EXE
09/12/28 00:43:14 5FOgda0r
ファイルが巨大じゃなきゃ全部読み込んで、
Ar=s.split("\n"); で改行で分割して、
でAr.length>=2で2行以上の場合と、
そうでない場合で処理を分けるのが簡単だと思った。
最後の行とそのまえってAr[Ar.length-1]とAr[Ar.length-2]だし。

775:名無し~3.EXE
09/12/28 01:01:40 duOTUlKt
>>771
FileSystemObject (テキスト ファイルの操作に使用するスクリプティング オブジェクト) が、前方という、1 つの方向だけを認識している点です。
ファイルの先頭から開始して、ファイルの最後に向かって進む必要があります。
別の開始場所を指定することも、最後から先頭に向かって後方から読み取ることもできません。
URLリンク(www.microsoft.com)

最終行だけ欲しいのに先頭から検索って無駄じゃねっていう意見に、一万行有ったってすぐに終わるって返しのあるページがあったはずだけど見つからなかった

776:名無し~3.EXE
09/12/28 01:09:10 Z+1i2G4O
アルゴリズム的にスマートに書きたいという欲求もあるもんだ
仕事でなければそれを追求するのもいい勉強になるしさ
時間的制約を考えれば769のいうことも一理あるというところだね

777:名無し~3.EXE
09/12/28 01:21:45 0M12J26z
バイト単位で読む場所わかってりゃadodb.streamとかでもいいんだろうけど

778:名無し~3.EXE
09/12/28 01:51:45 TV4cU58X
処理するデータが何十万件もあったらかなり違うけどな
少なくとも常にアルゴリズムを意識してるやつとそうでないやつでは
数年で大きな差がつくよ

779:768
09/12/28 03:33:13 r7K75E4h
とりあえず単純に速度的な比較をしてみようと
300万行のテキストで試してみたところ自分のマシンでは

>>770さんの方法で 35秒前後
>>772さんの方法で 45秒前後
1度SkipLineで行数を調べてからもう一度開き最後の2行だけ取得で 55秒前後
>>774さんの方法は、やはり大きなファイルには向いていないようで
10分以上たっても処理が終了する気配がありませんでした

>>775
そういうものなんですね
速度的にも普通に読み込むのが一番早いようだし
公式にここまではっきり書いてあると、この方法でいいのだと安心出来ました

どうもありがとうございました

780:名無し~3.EXE
09/12/28 04:50:11 PyWDz6+t
300万行とか膨大な桁を前提にするなら、もっと効率的な方法はあると思うけどね。

781:名無し~3.EXE
09/12/28 06:35:12 B5iJEHMd
たとえば?

782:名無し~3.EXE
09/12/28 10:49:07 2hmBKvKS
tailコマンドをwshで叩く

783:名無し~3.EXE
09/12/28 12:01:36 FVimMGRy
300万行試してみた。1行は小さめ。
>>770で10秒くらい。

ADODB.Streamでファイルの最後から1文字ずつ読んで、
2行確保したら終わり、だと一瞬だった。

784:名無し~3.EXE
09/12/28 12:10:56 rMWa9Z10
tailでも0.2秒だったわ。>>783 おおざっぱでいいからサンプルで教えてくれ。

objexec = objshl.Exec("\"" + objfso.GetParentFolderName(WSH.ScriptFullname)+"\\tail.exe" + "\"" + " -2 \"" + filetxt +"\"");
do{WScript.Sleep(100);}while(objexec.Status==0);sret=objexec.stdout.ReadAll();WScript.Echo(sret);

785:名無し~3.EXE
09/12/28 18:00:41 FVimMGRy
var start = new Date().getTime();

var filename = 'list.txt';
var Stream = WScript.CreateObject('ADODB.Stream');
var c, text = '', lf = 0;

Stream.Type = 2;
Stream.Charset = 'Shift_JIS';
Stream.Open();
Stream.LoadFromFile(filename);

var i = Stream.Size - 1;
read : for ( ; i != -1; i-- ) {
Stream.Position = i;
c = Stream.ReadText(1);
if ( c == '\r' ) continue;
if ( c == '\n' ) {
switch ( lf ) {
case 0 : break;
case 1 : last1 = text; text = ''; break;
case 2 : last2 = text; break read;
}
lf++;
} else {
text = c + text;
}
}
Stream.Close();

WScript.Echo(new Date().getTime() - start + 'ミリ秒');
WScript.Echo(last2);
WScript.Echo(last1);

786:名無し~3.EXE
09/12/28 18:06:17 FVimMGRy
改行を色々対応させると更にめんどいね。
普通に1行ずつ読んで負担にならない程度のファイルサイズなら、
保守性とかでそっちのがいいよ。

787:名無し~3.EXE
09/12/28 18:58:36 rMWa9Z10
こりゃ早いわ。 これくらい早いと
後ろから大雑把に500バイト読み込んで
適当な処理してもいいかもしんないね。
非常に参考になった。ありがと。

var i = Stream.Size - 500;
Stream.Position = i;
sAr=Stream.ReadText(500).split("\n");
Stream.Close();

WScript.Echo("-2 = " + sAr[sAr.length-3] +"\n" + "-1 = " + sAr[sAr.length-2] +"\n" + " 0 = " + sAr[sAr.length-1] +"\n" + (new Date().getTime() - start) + 'ミリ秒');

788:名無し~3.EXE
10/01/01 16:46:22 6ywjnZF6
実行一つでマルチスレッドで通信したい。

xmlhttp.open("POST", "~~", false); で第3引数をfalseにすると
xmlhttp.onreadystatechangeで受けるときもあるが、受けないときもあって終了してしまう。

第3引数をtrueにすると非同期になるらいしけど、
xmlhttp.onreadystatechangeで受ける前に処理が終わって終了してしまう。

どうしたらいいんだろう。WSHでtrueにする使い方ってもしかして使えない?

789:名無し~3.EXE
10/01/01 18:43:45 NNSFaVEC
WSHでマルチスレッドはちょっと難しいんじゃないすか?
スクリプトを同時に複数起動する(マルチプロセス)なんて
のは何ともないけど、1つのプロセスでスレッドを複数
立ち上げたいならPerlの方がいいと思いますけど。

790:名無し~3.EXE
10/01/01 19:55:56 uK4WgJZ0
wsh で使えるかどうかは知らないけど、 マルチスレッドライブラリ Concurrent.Thread とか。

791:名無し~3.EXE
10/01/01 20:46:14 U1BEAdsB
マルチスレッドが必要?

792:名無し~3.EXE
10/01/02 01:36:42 ao/59EuU
そうだな、我慢するか。ありがと

793:名無し~3.EXE
10/01/07 01:18:14 GcxiHLHM
>788
MSDNによると「WScript.Sleepで止めといて、WScript.Quitで抜ければOK」
URLリンク(msdn.microsoft.com)

794:名無し~3.EXE
10/01/07 13:27:44 VssB+QEa
>>788
XHRに限れば
通信完了後にコールバック関数が呼ばれるようにして
通信中にごにょごにょはできるけど、
その落としたデータを処理したいなら
結局は通信完了後じゃないと触れない
マルチスレッド以前の話だと思うが

795:名無し~3.EXE
10/01/12 18:26:19 Dwa4qtcE
echoやpopupでは一つのウィンドウに一つのテキストしか表示できないけれど
一つのウィンドウを使って刻々とテキストを更新して表示する方法はないですか

796:名無し~3.EXE
10/01/12 18:51:57 3thoTjT8
msagent
ie
hta
inputboxに貼り付け
powershell

797:名無し~3.EXE
10/01/12 21:08:01 6y7tc9j+
コマンドプロンプト(cscript)で動かす

798:名無し~3.EXE
10/01/12 21:14:39 BzW3pbKY
自分は拡張子jse、vbeをCscriptで動かすようにしちゃったよ。暗号化なんて使わないし。

799:名無し~3.EXE
10/01/12 22:04:14 HEnaLojO
ウィンドウ操作系のCOM使えば既存ウインドウのテキスト変更はできるから、
うまく組み合わせればどうにかなるんじゃね。

800:名無し~3.EXE
10/01/13 02:12:06 3721OXm1
HTAがいちばんかんたん

801:名無し~3.EXE
10/01/15 19:41:04 TCjMpnYM
ieのstatustextがいちばんかんたん

802:名無し~3.EXE
10/01/17 10:04:44 Ix5w7yDX
URLリンク(rocketeer.dip.jp)
↑ここにあったスクリプトなんですが、次のように改変して使いたいのですが動きません
どこに何が足りないのか、どなたかご教授くださいませ
(※ターゲットファイルはUTF-8なのでそのままで保存したいです)

803:名無し~3.EXE
10/01/17 10:05:26 Ix5w7yDX
Dim FI
Dim FO
Dim Obj
Dim beforeStr
Dim afterStr
Dim FileName
Dim R
FileName = "C:\Windows\system.ini"
beforeStr = "MailBox"
afterStr = "MailBox=d:\mailbox"
Set Obj = CreateObject("Scripting.FileSystemObject")
Set FI = Obj.OpenTextFile(FileName,1,0)
Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0)
While Not FI.AtEndOfStream = True
R = FI.ReadLine
If Left(R,Len(beforeStr)) = beforeStr Then
R = afterStr
End If
FO.WriteLine (R)
Wend
FI.Close
FO.Close
Obj.DeleteFile FileName
Obj.MoveFile FileName & ".bak",FileName
Set Obj = Nothing
Set FI = Nothing
Set FO = Nothing
Set Param = Nothing
WScript.Quit

よろしくおねがいします

804:名無し~3.EXE
10/01/17 13:11:12 sXZj+Qn6
'FileSystemObjectではUTF-8の読み書き出来ない。ADODBを使う。
'置換は正規表現でやった方が楽。
'C:\Windows\system.iniを読み込んで全置換してout.txtに書き出す例

Dim inStream, outStream
Dim regEx, Match, Matches, rep
Set inStream = CreateObject("ADODB.Stream")
Set outStream = CreateObject("ADODB.Stream")
Set regEx = New RegExp
regEx.Pattern = "\r\nMailBox"
regEx.Global = True
regEx.IgnoreCase = False
inStream.Open
inStream.Charset = "UTF-8"
inStream.LoadFromFile "C:\Windows\system.ini"
outStream.Open
outStream.Charset = "UTF-8"
str = inStream.ReadText(-1)
rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox")
outStream.WriteText rep
inStream.Close
outStream.SaveToFile "out.txt", 2
outStream.Close

805:名無し~3.EXE
10/01/17 13:20:08 sXZj+Qn6
さっきのじゃファイル先頭は置換されなかったわ。
> regEx.Pattern = "\r\nMailBox"

regEx.Pattern = "(^|\r\n)MailBox"

> rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox")

rep = regEx.Replace(str,"$1MailBox=d:\mailbox")

806:名無し~3.EXE
10/01/17 13:35:24 a2aY4UhM
> FileName = "C:\Windows\system.ini"
> Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0)
> Obj.DeleteFile FileName
> Obj.MoveFile FileName & ".bak",FileName

この辺Vista以降ならただの管理者じゃ動かないぞ

807:名無し~3.EXE
10/01/17 22:34:26 Qq5UNecS
>>804
早速のご教授ありがとうございます。ぶしつけながらもうひとつ質問があるのですが、、、
置換したい文字列はMailbox→Mailbox=d:\mailboxだけでなく
"Dustbox"→"Dustbox=e:\dustbox"もあるとしたらどうでしょうか?

3行目から最後尾までコピーしてつなげるのでは二つ目の処理がされませんでした
Mailbox用、Dustbox用と二つ用意してやるところを一枚のVBSファイルで行いたいのです
重ね重ねで恐縮ですがよろしくおねがいします

808:名無し~3.EXE
10/01/17 22:38:34 sXZj+Qn6
宿題丸投げ?
ヘルプのRegExpオブジェクトの所位見ろよ…

ぶっちゃけ書き加えるのは2行位だよ。

809:名無し~3.EXE
10/01/17 23:30:26 Qq5UNecS
>>808
お叱りごもっともです、今Googleで調べてるところです

Set regEx2 = New RegExp
regEx2.Pattern = "Dustbox"
rep2 = regEx2.Replace(str,"$1Dustbox=e:\dustbox")
outStream.WriteText rep2
↑現段階での知識ではこれくらいしか思いつかない・・・
しかも動かないw

810:名無し~3.EXE
10/01/18 01:16:54 M1A4s4VQ
Replaceに使う正規表現と置換後をArrayに入れておいて回せば追加にも強いだろう
てか>>804だと1行目を置換したいとき無理じゃね
Multilineもつけて^$使え

811:名無し~3.EXE
10/01/18 08:59:33 QEJpbXI0
>>810
そこは>>805ですぐ修正入れてるって
1レス後位見てくれよ('A`)

>>809
新しいオブジェクト作る必要無い。
パターンだけ変えて、前の置換結果にまた置換実行するだけ。

ヘルプ見てメソッドの引数と戻り値の意味位調べようぜ。

812:名無し~3.EXE
10/01/18 09:05:09 QEJpbXI0
>>810
ちなみにMultilineはVBScriptには無いのよ。

813:名無し~3.EXE
10/01/18 09:18:09 QEJpbXI0
ごめんあった。ヘルプに無いだけだったorz
しかしMSDN見ててもVBScriptに関するmultilineのドキュメント見つからん…

814:名無し~3.EXE
10/01/18 13:24:49 b+w7CHXS
URLリンク(msdn.microsoft.com)

815:名無し~3.EXE
10/01/18 22:17:50 TN5cwPWT
とりあえず>>804に↓をつなげることで目的の結果は得られましたので質問を終了したいと思います
inStream.Open
inStream.Charset = "UTF-8"
inStream.LoadFromFile "out.txt"
outStream.Open
outStream.Charset = "UTF-8"
str = inStream.ReadText(-1)
regEx.Pattern = "(^|\r\n)DustBox"
regEx.Global = True
regEx.IgnoreCase = True
rep = regEx.Replace(str,"$1Dustbox=e:\dustbox")
outStream.WriteText rep
inStream.Close
outStream.SaveToFile "out.txt", 2
outStream.Close

引数なんかは一応検索で調べたのですが初心者の私としてはこれで上出来としたいところです・・・
これをきっかけにスクリプトの勉強を始めました
今回はおつかれさまでしたw

816:名無し~3.EXE
10/01/19 02:15:25 wzldd/2a
どうせ勉強するならこっち 3行で書けるよ
URLリンク(www.microsoft.com)

817:名無し~3.EXE
10/01/19 06:44:28 9fLESZf0
>>816
XP以降限定じゃん

818:名無し~3.EXE
10/01/19 15:02:00 HLTLxXJY
wshだって98以降限定じゃん

819:名無し~3.EXE
10/01/19 18:37:12 PfKPChkB
>>817
それで困ることはもうほとんどないだろ。


820:名無し~3.EXE
10/01/19 21:15:45 f0FqX8pV
リネームツールとかUWSCとかでWSH使うから無いと困る。
powershellって他のツールからの利用ってある?
他から利用出来ないなら要らない子なんだが。

821:名無し~3.EXE
10/01/19 21:26:57 2KRU5yQk
>>820
powershell.exeを起動するだけだぞ?

822:名無し~3.EXE
10/01/20 12:21:41 nVMFUHnA
wsh(=jscript)ならjavascriptとかぶるとこも多い。
htmlや、ほかの似た文法のScript言語でも応用が利く。
powershellってどこまで他に応用聞くんだろ?
潰しが利くなら覚えよう思うんだが、背中押してくれw

823:名無し~3.EXE
10/01/20 13:45:02 VX+ha+rY
やめとけ

824:名無し~3.EXE
10/01/20 23:19:36 wLmohyzc
ADSI(VBS+LDAP)で、ADのコンピュータのoperatingSystemを取って配列にぶっ込んだ後、
For each NextループでwriteLineするとVistaのとこまで来たら落ちる。
データ型はXpもVistaもDirectorystringなんだけど、VistaTMと、TMが右肩に
ついてるから?
明日もうちょっと時間取って調べてみるつもり。

825:名無し~3.EXE
10/01/21 01:20:11 0RCGnhqV
//U

826:名無し~3.EXE
10/01/21 22:52:28 i5BvdjIA
>>825
ありがとう!今頃なんのことかわかったよ。
とりあえず値はUnicodeだとわかったので、明日また試してみる。


827:名無し~3.EXE
10/01/22 10:27:46 fhX6W0TP
潰しとか応用とか互換性とか言ってたら新しい物は生まれて来ない
3行で書けるんなら、3行で書いちまった者勝ちだろ?

828:名無し~3.EXE
10/01/22 11:21:15 tUYhcla4
PowerShellはごく一部のマニアだけが覚えておけばいい技術。
javascript=jscriptは時間の無い人が、出来るだけ多くのリターンを
得るために使う技術。
極めたい人はPowerShellに時間と金を投資するといい。
きっとそれなりの見返りがあるはず。

829:名無し~3.EXE
10/01/22 14:52:26 HBcO/6iY
>>768-787
powershellなら1行で書けるのにwshでちんたらやってられるか?
get-content $filepath | select-object -Last 2

830:名無し~3.EXE
10/01/22 16:37:00 v63o3WgQ
ほとんどの環境で標準装備ってのならいいんだけどね。
環境揃えて…っていうんならpowershellじゃなくても他にも色々あるわけだし。

831:名無し~3.EXE
10/01/23 11:01:56 HKm8upzI
Windows2000あたりから標準装備なら状況はちがったんだろうけどなぁ。残念。

832:名無し~3.EXE
10/01/23 15:26:57 SgH8LXDj
MS-DOSあたりから標準装備なら状況はちがったんだろうけどなぁ。残念。

833:名無し~3.EXE
10/01/31 19:53:03 mXB3Bqel
MS-DOSからおなじみのバッチファイルは
今流行ってないけどな。

834: ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
10/01/31 22:38:01 CcQLQSx7
          ∧_∧ ヒソ…
           <丶`∀´> ∧_∧
         / \/ )<丶`Д´>ウンウン、さすがは我が同胞。鋭いニダ!
        /  \___//       \
  __   .|     | / /\_ _ \ \_____
  \   ̄ ̄ ̄ ̄ ̄ ̄(__ノ   \    \__)      \
  ||\             \  .||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄

835:名無し~3.EXE
10/02/03 23:03:12 cRYBsWZ2
msgboxなどのダイアログ系は作業を中断されるので他の方法を考えています
マウスポインタのデザイン変更はVBSで可能でしょうか?

836:名無し~3.EXE
10/02/04 01:40:41 /5PVW4aL
VBAでも使ってろよと思う

837:名無し~3.EXE
10/02/04 12:07:19 YNWxT22I
D:\aaaaa\bbbbb\cccccを環境変数%abc%として登録して
D:\aaaaa\bbbbb\ccccc\d.exe
を%abc%にカレントを移してから実行したいのですが
CurrentDirectoryで環境変数ってどう使ったらいいのでしょうか?

838:名無し~3.EXE
10/02/04 12:35:15 /5PVW4aL
質問の意味が読み取れないけど、
環境変数の展開ならWScript.ShellのExpandEnvironmentStringsとか

839:名無し~3.EXE
10/02/04 17:30:12 WSu/UyEi
>>837
こういうことでいいのかな

Set objShell = WScript.CreateObject("WScript.Shell")
Set colEnv = objShell.Environment("User")

colEnv.Item("abc") = "D:\aaaaa\bbbbb\ccccc" '環境変数%abc%に登録

objShell.CurrentDirectory = colEnv.Item("abc") '%abc%にカレントを移動
objShell.Run(".\d.exe")                'd.exeを実行


840:名無し~3.EXE
10/02/04 18:41:05 qbYhdWoJ
>>835
スクリプトの終了は知りたいけどポップアップはうぜぇ、ということ?
スクリプトでBeep音を鳴らすことなら出来るよ

841:名無し~3.EXE
10/02/04 20:33:39 YNWxT22I
>>839
ありがとうございます
>objShell.CurrentDirectory = colEnv.Item("abc") '%abc%にカレントを移動
こっちにもItemが必要なことに気が付きませんでした
おかげさまで希望の動作になりました

>>838
ありがとうございました

842:名無し~3.EXE
10/02/06 02:11:44 N6DMGysY
>>835
処理中メッセージでぐぐれ

URLリンク(maglog.jp)

843:名無し~3.EXE
10/02/09 11:20:45 9vTb+OVv
IEを使ってファイル名を得るスクリプトを取りあえず検索して
次のようなのを見つけましたが
初期のフォルダを設定する方法が分かりません
どうやったらいいのでしょうか?

Set Ie = CreateObject("InternetExplorer.Application")
Ie.Navigate( "about:blank" )
Do While Ie.Busy
Wscript.Sleep 10
Loop

Ie.document.getElementsByTagName("BODY")(0).innerHTML = "<INPUT id=FilePath type=file>"
Ie.document.getElementById("FilePath").click
if ie.document.getElementById("FilePath").value = "" then
WScript.Echo "ファイルは選択されませんでした"
WScript.Quit
end if

WScript.Echo ie.document.getElementById("FilePath").value

Ie.Quit
Set Ie = Nothing


844:名無し~3.EXE
10/02/09 16:03:31 8BqPaL3i
初期のフォルダを設定する type=file でぐぐれ

845:名無し~3.EXE
10/02/09 17:01:00 8BqPaL3i
どこかに覚えているみたいだから、レジストリを検索して、書き換えれば?

846:名無し~3.EXE
10/02/09 17:40:17 9vTb+OVv
>844
hta の雛形に付け加えたので異様に長くなってしまったけど
取りあえず初期値がカレントのフォルダになる hta file はできた
カレントじゃなくて自由なフォルダになるのはまだ分からない

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>雛形</title>
<script Language="VBScript">
<!--
Option Explicit ' 変数に対して、明示的な宣言を強制します。
dim exit_proc_flag

initialize_all

'**************************** 全体的な構成  ********************************

sub initialize_all
exit_proc_flag=false
end sub


847:名無し~3.EXE
10/02/09 17:41:15 9vTb+OVv
'終了処理
sub exit_proc
msgbox Document.testfrm.example.value
exit_proc_flag=true
end sub
sub HtaFinalExit
if not exit_proc_flag then
exit_proc
end if
end sub
Sub all_exit_OnClick '<OK>ボタンのOnClickイベントプロシージャ
exit_proc
window.close
End Sub
'******************************************************************************
-->
</script>
</head>

<body onUnload="HtaFinalExit()">
<FORM name="testfrm">
<input type="file" name="example" size="90">
<br>
<input type="button" name="all_exit" value="終了">
</body>
</FORM>
</html>


848:名無し~3.EXE
10/02/09 18:28:58 8BqPaL3i
それってカレントのフォルダなのか?
htaの場所じゃないのか?

849:名無し~3.EXE
10/02/09 18:32:07 9vTb+OVv
>>848
hta の場所って意味で言ってる
言い方が曖昧だったかな

850:名無し~3.EXE
10/02/09 19:09:32 8BqPaL3i
そんなことないよ
明確に間違ったこと言ってるだけだよ

851:名無し~3.EXE
10/02/14 17:05:40 9nnubjX9
FileOpenDialog使えば?

852:名無し~3.EXE
10/02/19 22:29:31 LDuD38Q5
wshShellのRunをコードに書いて保存しようとしただけでトロイ認定されてソースが消えたお・・・・

853:名無し~3.EXE
10/02/20 01:47:37 qEf0FvLR
まぁ世の中の9割以上の人には、wshをとろい認定しても問題は無いんだけどな
一部のソフトのインスコ・設定でwsh・hta使ってるのも見なくもないけど

854:名無し~3.EXE
10/02/20 10:43:48 8rPqr8jG
VS2008 Express Editionのインストーラが
HTAを使ってるぜ。

855:名無し~3.EXE
10/02/25 21:39:30 gk2IrG8J
ie.navigateみたいなことって他のブラウザでもできますか?
マイクロソフト以外のブラウザはそもそもどうやって情報集めたらいいの?

856:名無し~3.EXE
10/02/25 21:57:08 OS5Whsth
できるものもあればできないものもあるだろな

857:名無し~3.EXE
10/02/26 18:22:28 cT5sOvCi
COMインターフェイスがなきゃダメだから
クロスプラットホーム対応のブラウザにWindows版だけ実装することは考えにくい

858:名無し~3.EXE
10/02/26 22:23:09 DbpCfW0J
コントロールしたいときは我慢してIEを使えってことですかね?

859:名無し~3.EXE
10/02/26 22:29:24 TVISpBki
無理に使わんでもええよ

860:名無し~3.EXE
10/02/28 14:58:34 h+sfVlse
Sleipnirなら、COMインターフェイス作っているぽいよ
他は地道にググるか、自分でoleviewとかで確認してくれ

もし、起動させて特定のURL開くだけなら
Shellで起動時にコマンドライン引数で指定するのが簡単
できないブラウザもあるかもしれないけど

861:名無し~3.EXE
10/02/28 23:44:27 eIRa0akU
男は黙って SendKeys

862:名無し~3.EXE
10/03/01 21:44:05 FmfygmuX
test

863:名無し~3.EXE
10/03/04 22:14:49 FL0aWnTL
いまさらながら
64bits版 windowsにもwshって入ってるの?

864:名無し~3.EXE
10/03/04 22:26:49 o4aSa0C3
入れない理由がないし実際入ってる

865:名無し~3.EXE
10/03/04 22:32:57 FL0aWnTL
失礼しました。

866:名無し~3.EXE
10/03/07 00:39:46 yMMDGSK4
WSHではADODB.Streamを使うことでバイナリファイルを読み込み、
バイナリファイルの中に潜んでいる文字をテキストファイルに
保存できると知って、今日の夕方に入門書を買ってきました。
最終目標はnamazu用のfilterを自作したいと思ってます。
よろしくお願いします!

867:名無し~3.EXE
10/03/07 01:11:56 yMMDGSK4
だいたい出来ました、ありがとうございました!

868:名無し~3.EXE
10/03/07 01:56:16 zmuLo5KI
これは新しい自己解決のパターン・・・

869:名無し~3.EXE
10/03/07 02:04:34 ehbFBfeC
入門書ってなにだろ?

870:名無し~3.EXE
10/03/07 02:51:12 qV0qSi+H
大型新人キター

871:名無し~3.EXE
10/03/08 10:01:54 qhL2N4DK
JSでTerminateを使いプロセスを強制終了させていますが、
強制ではない方法で終了させることはできないでしょうか?

872:名無し~3.EXE
10/03/08 10:58:50 reTc7xAA
「ユーザー名およびパスワードの保存」画面で管理される
ユーザー、パスワードの情報をwshで追加、削除する事はできますか?
(「ファイル名を指定して実行」から「control keymgr.dll」を実行して表示する内容)

別ドメインのサーバの共有フォルダにアクセスしたいのですが、
ネットワークドライブを設定する方法では、再度パスワードを入力する必要がありました。
この画面で登録しておくと再入力せずアクセスできたので
限られたユーザーにwshで配布したいと考えています。


873:名無し~3.EXE
10/03/08 14:35:46 N4hgDfir
>>871
JSにTerminateがあるのか?VBSにはあるが?

874:名無し~3.EXE
10/03/08 19:55:15 qhL2N4DK
var WMIService = GetObject('winmgmts:'
+ '{impersonationLevel=impersonate}!\\\\'
+ computer + '\\'+computer_name+'\\cimv2');
var processList = WMIService.ExecQuery('Select * From Win32_Process Where Name = "calc.exe"');
var processEnumerator = new Enumerator(processList);
while (!processEnumerator.atEnd()) {
processEnumerator.item().Terminate();
processEnumerator.moveNext();
}

こんな感じで使用しています

875:名無し~3.EXE
10/03/08 23:49:45 N4hgDfir
>>874
それはJSのでなくWMIのWin32_ProcessのTerminateだろ
それなら"taskkill /pid " & processEnumerator.item().IdをCreateすればよい

876:名無し~3.EXE
10/03/09 00:17:04 W+HEZzDA
ありがとうございます。
出来ました。

877:名無し~3.EXE
10/03/09 07:31:07 Ox6yGdZE
VBSをCOM化して実行したら「メモリーが不足してプログラムを実行できません」と出ました。

878:名無し~3.EXE
10/03/09 11:20:33 6ivRnBQq
プログラム板のwshスレからこっちに流れてきました。マルチごめん。

WMI使ってリモートPCのIP変更したいんだが、変更後にRPCエラー待ちが発生して自動処理できない。
エラー待ち時間を短縮するとか、なんかいい方法知ってる人がいたら助けて。

On Error Resume Next

strComputer = "10.1.1.1"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableDHCP()
Next

879:名無し~3.EXE
10/03/09 16:37:00 lGaT6Nz1
>>877
CMD化しろよ

880:名無し~3.EXE
10/03/09 19:14:46 1jHU3iwO
>>878
相手にスクリプトを産み付けて自分のプロセスとして処理させるってのはどうだ?
pstoolsの出番かも知れないが。

881:名無し~3.EXE
10/03/09 19:15:07 Ox6yGdZE
>>879
産休です。明日会社のサーバで試してみます

882:名無し~3.EXE
10/03/11 00:16:55 aOKfiRUH
ctrlキーが起動時に押されていたら処理を替えるようにしたいんですが、どうすればいいですか?

883:名無し~3.EXE
10/03/11 02:48:28 CgyxwHxo
スクリプトからシフトキー類の押し下げ状態を調べる。

884:名無し~3.EXE
10/03/11 19:28:02 z4Y3vV8Y
>>880
WshController使ったリモート実行じゃろうか?
これは試していたんだが、「致命的エラー」が出てNGだった。
リモートPCのレジストリを設定した後、「wscript -regserver」を実行したんだがやっぱりダメだった。
「pstools」はしらんかった。ちょっと調べてみる。
うまくいったら結婚してあげてもいい。

885:名無し~3.EXE
10/03/12 09:53:05 N9db+s4y
WSHオワタ・・・

PowerShellの概要 - @IT
URLリンク(www.atmarkit.co.jp)

例えば、テキスト・ファイルに現在時刻を書き込むという処理をWSHスクリプト(言語はVBScriptを使用)で書くと次のようになる。
Option Explicit
Dim objFSO, objTextStream
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.CreateTextFile("test.txt")
objTextStream.WriteLine Date & " " & Time
objTextStream.Close()
Set objFSO = Nothing
Set objTextStream = Nothing

 このように、ファイルの読み書きというシステム管理では基本となるようなことでも、
COMオブジェクトを呼び出すなど非常に多くの記述が必要になる。
ところがPowerShellで同様の処理を書くと1行で済む。

Get-Date | Set-Content test.txt

886:名無し~3.EXE
10/03/12 13:10:53 QFmuvE6T
バッチファイルでも1行で済むが?
echo %date% %time% > test.txt

887:名無し~3.EXE
10/03/12 13:23:01 nsgGjLNb
>>884
自己レス。
psexec使ってのwsh送り込みはできなかったが、batファイルならいけた。
これなら10秒ほどのタイムアウト待ちなのでなんとかなりそう。

>>880
無限の愛を貴方に。

888:名無し~3.EXE
10/03/13 00:20:18 /FMALwnt
>886
その手法は確かWindows95/98/Me/NT4.0では使えないんだったな。

889:名無し~3.EXE
10/03/13 00:22:32 gC28eAby
>>888
PSのこと?

890:名無し~3.EXE
10/03/13 01:55:56 4tIVLF1Y
>>885
そういうのって例えば、
 日付の書式をちょっと変えて書き込みたいな・・・
とか考え出すとあっという間にコード量の差がなくなってしまうからなぁ。

>>886
つまり、それをWSHから呼び出せばもっと簡潔にできるわけだな!

・・・って、件のWSHのスクリプトも宣言とか開放を省略すればもっと行数減るなw

891:名無し~3.EXE
10/03/13 17:14:55 8P3J/gMj
CreateObject("Scripting.FileSystemObject").CreateTextFile("test.txt").WriteLine Date & " " & Time

1行で済みましたww

892:名無し~3.EXE
10/03/13 18:33:24 KBOSrb+k
>>885の執筆者より>>891の勝ち

893:名無し~3.EXE
10/03/13 20:04:42 M3Neakab
無駄口は Now も知らん(忘れた)のか・・・・

894:名無し~3.EXE
10/03/14 13:54:28 lYWxxKnc
1時間ごとにランダムに一曲再生するというコードを動かしているんだけど
その時WMPが既に何か再生中だったらキャンセルするというコードはどう書けばいいですか?

895:名無し~3.EXE
10/03/14 15:16:43 wewHDlVc
プロセスのCPU使用状況を調べてwmpのCPU使用率ゼロを判別する

896:名無し~3.EXE
10/03/14 15:39:50 jU9VRU0u
つまんね

897:名無し~3.EXE
10/03/14 18:30:33 voCmsmxq
WSHから特定のアプリケーションにSendmessageできる公開されたDLLってあります?
または直接EXEを起動したり、regsvr32登録されてないDLLの関数を呼び出す方法はありませんか?
自作のDLLがRegsvr32で登録できずCreateobjectできません


898:名無し~3.EXE
10/03/14 18:43:39 +Lvh+6MO
powershell

899:名無し~3.EXE
10/03/14 18:55:33 u5NEBbCg
ActivexPosh

900:名無し~3.EXE
10/03/16 16:18:13 ohYW6Imb
AutoItXの各種メソッドが128文字以上扱えるようになってたヽ(´ー`)ノ

901:名無し~3.EXE
10/03/18 18:15:26 iM/YKp6K
スレ違い

902:名無し~3.EXE
10/03/25 23:54:26 PC4a+bWW
WSHのCMD化の方法を教えてください。

903:名無し~3.EXE
10/03/26 00:30:35 ey1DdaEX
js2cmd

904:名無し~3.EXE
10/03/27 23:21:50 AeDranBW
IEの右クリックからJavaScriptを呼び出し、現在閲覧しているページのタイトルを所得することは
できるんでしょうか?右クリックする対象はページ上の画像を考えてます。

905:名無し~3.EXE
10/03/27 23:36:21 4iD/8n0I
できるがスレ違い ぐぐれ menuext

906:904
10/03/28 10:22:48 mhne3zrz
レジストリ書き足して、htmにJavaScript記載して画像の情報は取得できました。
閲覧中のhtmlのタイトルを取得する方法はあるのかなと思いまして、この場合のオブジェクト対象は画像なんですよね?
現在閲覧中のページのタイトルを取得、みたいな関数があれば

907:名無し~3.EXE
10/03/28 11:01:19 /xGuJN49
>>906
external.menuArguments.document.title
スレチだから他行け

908:名無し~3.EXE
10/03/28 11:36:22 mhne3zrz
>>907
できました、ありがとうございます。
WSHで合ってると思ったんですがスレチだったんですか? 理解不足ですみません

909:名無し~3.EXE
10/03/28 15:44:41 4WEbf+FX
閲覧中のウェブページをwshを使って自分のアドレスに送りたいのですが
どういう風にしたら良いですか?

910:名無し~3.EXE
10/03/28 15:45:43 4WEbf+FX
追記。アドレスだけじゃなくてページの中身そのものをメールとして送りたいということです。

911:名無し~3.EXE
10/03/28 16:52:47 z/Q5yi5P
>>910
ブラウザのURL拾って、mhtファイル作って、
URLリンク(www.microsoft.com)
じゃね?

メールの作成もmhtもCDO.Messageで出来るんだな・・・mhtの出自がそうなんだから
当たり前といえば当たり前か。

912:名無し~3.EXE
10/03/28 17:02:47 4WEbf+FX
回答ありがとうございました。そのページを参照にちょっと頑張ってみます。

913:名無し~3.EXE
10/04/01 00:21:13 CuuAcOhW
ショボくてすまんが[windows]+[←]or[→]キーで使えるwindows7の機能は、
どうやってスクリプト書いたらいい?

914:名無し~3.EXE
10/04/01 01:01:22 +U1Gw17B
つAHK

915:名無し~3.EXE
10/04/10 22:14:58 wPmAPdMC
今はNILScriptの方がいいんじゃない?

916:名無し~3.EXE
10/04/11 13:24:09 Yl41pEjS
なにそれ

917:名無し~3.EXE
10/04/11 22:47:49 adH92DlF
【JavaScript系】 NILScript 【AutoHotkey風】
スレリンク(tech板)

918:名無し~3.EXE
10/04/11 23:11:58 1lpeBxiT
NILは2000では動かないよ。XP32bitだけだな。
ただAutoItXやSFCMiniなどのDLLを入れたあとのWSH環境に比べるとどうなんだろうね?
マニフェストや後付のDLLを使わずにDmonkeyやUWSC、AutoHotKey以上のことをやりたいらしいが。
javascriptの文法でキーカスタマイズからアプリ制御までなんでも出来るスクリプト環境を
つくろうってのは正しい方向性だと思うけど。

919:名無し~3.EXE
10/05/13 21:56:55 m6OaNJxa
ほう

920:名無し~3.EXE
10/06/03 17:53:48 iUihJw3M
var ie;var url,login_id,login_pw;function wait() { while(ie.Busy || ie.ReadyState!=4){ WScript.Sleep(100); }} function browser() { ie=new ActiveXObject('InternetExplorer.Application');ie.Visible=true;ie.Navigate(url);wait(); }
function post() { ie.document.forms[0].exec.click();wait(); } function reload() { ie.Navigate(url);wait(); } try{ url='★';browser();for (i = 0; i < 5; i++) { post();reload();}} catch(e){ } finally{ ie.Quit(); }

これのtry{}にあるurlに書かれたURLに飛んだあと別のURLに飛ぶようにできないのだろうか

var ie;var url,login_id,login_pw;function wait() { while(ie.Busy || ie.ReadyState!=4){ WScript.Sleep(100); }} function browser() { ie=new ActiveXObject('InternetExplorer.Application');ie.Visible=true;ie.Navigate(url);wait(); }
function post() { ie.document.forms[0].exec.click();wait(); } function reload() { ie.Navigate(url);wait(); } try{ url='★';browser();url='★';for (i = 0; i < 5; i++) { post();reload();}} catch(e){ } finally{ ie.Quit(); }

これだと飛ばぬ・・・

921:名無し~3.EXE
10/06/03 18:23:45 iUihJw3M
>>920にあともう一つ


IEタブを2つ表示させて 1つ目のタブにURL1を
2つめのタブにURL2を飛ばしたいけどどうしたらいいのかわからない


922:名無し~3.EXE
10/06/09 14:11:04 iwdCkyf4
>>921
navOpenInNewTab

923:名無し~3.EXE
10/06/09 19:47:37 dzSkViOB
>>922
それvbsだよね?
JavaScriptでは無理なのか?

924:名無し~3.EXE
10/06/09 19:56:48 jlgSYqLi
言語には関係ない

925:名無し~3.EXE
10/06/10 14:14:01 kJViM8Jd
ExecWBでソースの表示ってできない?

926:名無し~3.EXE
10/06/10 15:22:23 6Q2g02au
ブラウザそのものにはソースとかないしなぁ

927:名無し~3.EXE
10/06/11 12:21:04 uxlvNz01
>>925
IOleCommandTarget::Exec

928:名無し~3.EXE
10/06/11 23:26:51 biU9CjCk
JScriptをコンパイルしたいんだが、
WScriptオブジェクトなんてしらねって弾かれてもうた(´・ω・`)

Wscriptオブジェクトを引っ張ってくる方法か、
QUITとADODB.Streamの代替手段をおしえてくだせえ




929:名無し~3.EXE
10/06/12 00:31:54 tGmfb7H0
SendKeysで今までWebブラウザや2chブラウザOffice関連やその他の色んなソフトで自動化に成功してきましたが、
ゲームのエミュレータにだけはなぜか、ウィンドウをアクティブにした状態であってもキーを送れないです。(反応しないので送れているかわからない)
nnnesterやsnes9kやMAMEなどで試しましたが、どれもSendKeysで送ったキーでゲーム内のキャラが動いてくれませんでした。

エミュレータは(SendKeysが可能な)他のアプリケーションとは入力の受付方法が違うのでしょうか
またそのようなソフトに対してはWSHではキーを送って操作することは不可能ですか?

930:名無し~3.EXE
10/06/12 00:58:38 tGmfb7H0
調べたところ、SendKeysの問題ではなく、アプリケーション側のDirectInputの方の問題でした。
解決したのですみません。お邪魔しました

931:名無し~3.EXE
10/06/12 21:51:27 RtlbTOqz
win7でIE起動しようと思ったら動かない
Option Explicit

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
Set objIE = Nothing


932:名無し~3.EXE
10/06/13 01:10:20 Czl7gJkW
そりゃだめだ

933:名無し~3.EXE
10/06/13 01:42:07 O+PAYz4/
Win XPの標準機能のみでパスワード付きZIPファイルを作りたいのですが、
VBScriptで実現させるにはどうやったらよいのでしょうか?
(できればSendKeys未使用で)

用は↓にパスワード機能を追加したいのです・・・
URLリンク(www.vector.co.jp)

934:名無し~3.EXE
10/06/13 07:43:33 ejrpzprv
>>933
unzip32.dllを実行する.exeってなかったっけ?
そいつに引数を渡す、つまり単純なWScript.ShellのRunってのはダメなのか?

935:名無し~3.EXE
10/06/13 11:42:29 h7K8R6ZR
会社のPCとかで、DLLやexeを勝手に入れられない環境なのかも。

ところで、Win XPの標準機能でパスワード付きZIPって作れたっけ?

936:名無し~3.EXE
10/06/13 13:08:28 OOuLiq/a
>>935
zipファイルをフォルダとして開いて、その中で右クリックして「パスワードの追加」を選ぶ

>Windows XP で圧縮 (zip) フォルダーを作成および使用する方法
>URLリンク(support.microsoft.com)

Shell.ApplicationのNameSpaceでzipファイルを開いて
InvokeVerbで出来ないかな・・・と思ったんだが、
どうも通常のコンテキストメニューじゃないっぽい。


というわけで漏れはあきらめて、7-zip.exe経由のスクリプトにした罠

937:名無し~3.EXE
10/06/14 02:59:19 Shk6x1Ga
SendKeysでできるならそれでいいじゃないか

938:名無し~3.EXE
10/06/15 16:20:48 U7q+ETSX
>>928
var Wscript=new Object();

939:名無し~3.EXE
10/06/27 20:05:44 519MlYZh
ScriptControlについて詳しく解説してるページはないでしょうか
MSのページ以外で

940:名無し~3.EXE
10/07/06 18:27:24 /FuRxImU
はい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch