WSH(・∀・)スレッド! Part 3at TECH
WSH(・∀・)スレッド! Part 3 - 暇つぶし2ch800:デフォルトの名無しさん
09/03/20 18:10:22
うん。ランチャとジャンクション使うよ普通は

801:デフォルトの名無しさん
09/03/20 18:52:59
.wshのショートカットって使わないな。
.lnkのショートカット使うし。


802:デフォルトの名無しさん
09/03/20 18:54:51
WSHって使わないな。
PowerShell使うし。

803:デフォルトの名無しさん
09/03/20 19:37:41
PowerShellって使わないな。
AppleScript使うし。

804:デフォルトの名無しさん
09/03/20 19:56:04
> AppleScript
どこら辺を笑えばいいの?

805:デフォルトの名無しさん
09/03/20 20:21:43
あまりの滑りっぷりの寒さ

806:デフォルトの名無しさん
09/03/21 11:46:27
#!/bin/bash
hostname
who is god
hostname | sed 's/^[^\.]*\.//'

# VBSでやるとしたら
#Option Explicit
#
#Dim WSHNetwork
#Set WSHNetwork = WScript.Createobject("WScript.Network")
#
#WScript.Echo "ドメイン名  :" & WSHNetwork.UserDomain
#WScript.Echo "ユーザー名  :" & WSHNetwork.Username
#WScript.Echo "コンピューター:" & WSHNetwork.ComputerName


807:デフォルトの名無しさん
09/03/21 11:47:47
#!/bin/bash
sed 's/ようこそ/Welcome/g' youkoso.txt > welcome.txt

# VBSでやるとしたら
#Set fso = CreateObject("Scripting.FileSystemObject")
#Set regEx = New RegExp
#Set inFile = fso.OpenTextFile("C:\TechEzo\Round23.txt")
#Set outFile = fso.CreateTextFile("C:\TechEzo\Round23_2.txt")
#
#regEx.Pattern = "ようこそ"
#repStr = "Welcome"
#Do Until inFile.AtEndOfStream
# tempLine = inFile.ReadLine
# repLine = regEx.Replace(tempLine, repStr)
# outFile.WriteLine repLine
#Loop
#
#inFile.Close
#outFile.Close

808:デフォルトの名無しさん
09/03/21 11:52:56
MSがWSHを半ば見限ってPowerShellを開発したのは当然のこと。
上記二例からわかる通り、WSHでは
非開発者の管理者やエンドユーザには負担が大きくなるからだ。

809:デフォルトの名無しさん
09/03/21 13:13:07
わかってないなぁ
M$は普通の人にPCを便利に使ってもらう必要はない
直感的に操作できるようにして便利だと錯覚させればOKだから

それに、一般人に簡便なスクリプト言語与えたら、簡単なツールで金取ってるような無能が失業するだろ
色んな意味で、馬鹿にはコンビューティングに目覚めないでもらったほうが都合がいいのさ

810:デフォルトの名無しさん
09/03/21 14:12:53
PowerShellなら
(cat youkoso.txt) -replace "ようこそ","Welcome">welcome.txt
でいいんだもんな。リダイレクションだとUnicodeになっちゃうからOut-Fileを使う方がいいんだろけど。
WSHはエディタの補完機能がないと全く書く気になれない。

811:デフォルトの名無しさん
09/03/21 14:24:17
> 上記二例からわかる通り
そんな不適切な例で、何が解るって言うつもりだ?

君がやってるのは、「四則演算は電卓の方が手軽だからPCはこの世に必要ないものです」と同じ事。
電卓側が手軽になる例だけ挙げて、その逆やましてや電卓で不可能なことには触れていない。

本気で書いてるなら「視野が狭い」と言うべきだが、きっと故意にやってるので「頭が悪い」と言った方が正しいな。

812:デフォルトの名無しさん
09/03/21 15:41:01
> 上記二例からわかる通り
「頭が悪い」

813:デフォルトの名無しさん
09/03/21 15:47:49
実にくだらない争いを見た。

814:デフォルトの名無しさん
09/03/21 16:57:26
PowerShellやbashより簡単になる例ってどんなのがあるの?

815:デフォルトの名無しさん
09/03/21 17:01:31
すれ違い

816:デフォルトの名無しさん
09/03/21 17:02:57
しつこい

817:デフォルトの名無しさん
09/03/21 19:00:47
>>807
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile("C:\TechEzo\Round23_2.txt").Write Replace(fso.OpenTextFile("C:\TechEzo\Round23.txt").ReadAll,"ようこそ","Welcome")


818:デフォルトの名無しさん
09/03/21 21:19:05
>>817
それでもbashより面倒なのがイタいな

819:デフォルトの名無しさん
09/03/21 21:25:09
そんなに行数、文字数減らしたかったら、
sed win32版を使えばいいだけ。あとはcygwinでも使え。
比較すること自体が嫌がらせ。荒らすなよ。

820:デフォルトの名無しさん
09/03/21 22:00:41
>>818はsedをbashだと思ってるのかな?

821:デフォルトの名無しさん
09/03/21 22:05:54
というか >>807 の「VBSでやるとしたら」のコードが面倒過ぎなだけだろうもん。

Set oShell = CreateObject("WScript.Shell")
oShell.Exec("cmd /c more > C:\TechEzo\Round23_2.txt").StdIn.Write _
sText = Replace(oShell.Exec("cmd /c type C:\TechEzo\Round23.txt").StdOut.ReadAll, "ようこそ", "Welcome")

822:デフォルトの名無しさん
09/03/21 22:06:54
間違った・・・・。

Set oShell = CreateObject("WScript.Shell")
oShell.Exec("cmd /c more > C:\TechEzo\Round23_2.txt").StdIn.Write _
Replace(oShell.Exec("cmd /c type C:\TechEzo\Round23.txt").StdOut.ReadAll, "ようこそ", "Welcome")

823:デフォルトの名無しさん
09/03/21 23:11:20
perl(Active) や PHPから使えばいいじゃん。

824:デフォルトの名無しさん
09/03/22 01:18:30
@if(0)==(0) CScript.exe //NoLogo //E:JScript "%~f0" <youkoso.txt > welcome.txt & GOTO :EOF & @end
WScript.StdOut.Write(WScript.StdIn.ReadAll().replace(/ようこそ/g,"Welcome"));

825:デフォルトの名無しさん
09/03/22 03:22:35
WSHでの正規表現の扱いは、確かに面倒ではある

826:デフォルトの名無しさん
09/03/22 03:45:23
その代わりに柔軟だけどね

827:デフォルトの名無しさん
09/03/22 04:26:12
> 上記二例からわかる通り
ほんとよく分かった。もっと勉強してから出直せよ

828:ショートカット
09/03/22 14:16:58
>>799
>>799

おーハードリンクいいですね

早速ショートカットをハードリンクに置き換えるスクリプトでも、、

と思ったんだけどひとつ素朴な疑問。

同じ内容の2ファイルが
ハードリンクなのか別コピーなのか識別する方法って
どうやるの?
(内容がFC /bとかで一致してるのがわかってるとして

829:ショートカット
09/03/22 14:17:56
さすがに
試しに片方のファイルに追記してみるとかはなしで

830:デフォルトの名無しさん
09/03/22 16:43:41
ハードリンクの意味わかってるか?

831:ショートカット
09/03/22 17:27:38
>>830
その質問は本人に聞いても意味ないでしょ

832:デフォルトの名無しさん
09/03/22 17:28:07
>>830
質問の意味わかってるか?


833:デフォルトの名無しさん
09/03/22 17:35:55
fsutil objectid query ファイル名
の結果が一致したら実体が同一ってことのはず。

834:デフォルトの名無しさん
09/03/22 17:45:30
リンクカウントは?

835:デフォルトの名無しさん
09/03/22 17:50:50
カウントだけじゃ
・AとBが同一内容で実体が別
・それぞれA=A'とB=B'のハードリンクが存在する
というケースで誤認するはず

836:デフォルトの名無しさん
09/03/22 17:54:17
そうじゃなくてリンクカウント調べるには?


837:デフォルトの名無しさん
09/03/22 18:14:17
objectidが一致するファイル名を数える

838:デフォルトの名無しさん
09/03/22 18:15:18
だからリンクカウントじゃハードリンクの存在しかわからないから
誤認する可能性があると言ってる。厳密にやる必要性については知らん。

839:デフォルトの名無しさん
09/03/23 00:11:43
GetFileInformationByHandle()つかうみたいね

840:618
09/03/23 00:52:03
>>836
「リンクカウント調べる の は?」
と空目してた。正直すまんかった

841:デフォルトの名無しさん
09/03/23 21:34:37
IE8 入れたけど、htmlfile から window オブジェクト取得して
userAgent 調べると MSIE 7.0 のままなんだけど、何故に?

IE から調べるとちゃんと MSIE 8.0 が表示される。

842:デフォルトの名無しさん
09/03/23 23:39:00
IE8、正式版と言うわりには色々おかしいような
WSH関係無いけど、SSLのクライアント証明書が使えなくなった

843:デフォルトの名無しさん
09/03/24 20:59:43
>>841
べつのdllなんじゃろうて
その理由はきっとこぴぺ開発
もっともらしく言えば既存環境に影響を与えないように環境を二重にしたとか

844:デフォルトの名無しさん
09/03/25 03:05:21
確かに htmlfile と IE の window オブジェクトは色々違いあるね。
前者は特にクリップボードに書き込みできないのが勿体無い。

845:デフォルトの名無しさん
09/03/25 10:17:45
それは単にセキュリティゾーンの設定

846:デフォルトの名無しさん
09/03/25 11:10:30
prompt()がだめとか

847:デフォルトの名無しさん
09/03/30 00:10:40
wsfの拡張子を他のに変えてWSHに渡すと
「ファイル拡張子 ".xxx" を持つスクリプト エンジンはありません。」
って言われるんだが、内容はwsfの様式で、拡張子が.wsfではないファイルを
wsfとして実行させるにはどうしたら良い?

.wsfはwscript.exeの通常実行のままで、他を拡張子毎にcscript.exe実行やデバッガ実行などを
既定動作にしたいんだが、.wsf時には正常に実行できるファイルでも、拡張子を変えた途端にエラーとなる。
デバッグの有無(//D)なら、<?job debug="true" ?>で済むが
デバッガ実行(//X)とかcscript.exe実行とかはxml要素での指定が出来ないし。

スクリプトで自身を実行し直したり、ラッパー噛ませたりと妥協策は有るには有るが
そういう姑息な方法ではなく、別拡張子を直接渡して問題なく実行できる方法が有ったら教えて欲しい。

848:デフォルトの名無しさん
09/03/30 00:15:15
ない

849:デフォルトの名無しさん
09/03/30 00:17:29
?script.exeの名前を変えてバイナリ書き換え

850:デフォルトの名無しさん
09/03/30 02:48:41
短いファイル名を使えばできるかも

851:デフォルトの名無しさん
09/03/30 03:47:59
拡張子を偽装するほうが、”姑息な方法” だと思うが。姉歯か?おまいは・・・

バッチで
CD /D %~dp1
IF %~x1==.wsf wscript.exe %1
IF %~x1==.vbs cscript.exe %1
IF %~x1==.unko cscript.exe //X %1
みたいなのを作って、ドラッグ&ドロップするのが簡単


852:デフォルトの名無しさん
09/03/30 03:54:39
知らないのに無理にレスすんな

853:デフォルトの名無しさん
09/03/30 16:51:02
ショートカットで我慢しろ

854:デフォルトの名無しさん
09/03/30 19:24:03
なるほど
ありがとうございました

855:847
09/03/30 19:50:17
>>848
ご存じありませんか。

>>849
それが出来るならそれでも良いんですが、バイナリをいくつかの文字コードで検索してみたところ、
使用方法説明の「//Job:xxxx Execute a 【WSF】 job」や、無関係な「Windo【wsF】older」しかヒットしません。

「もしかしたらこれで出来るかも」という思いつきなら、残念ながら出来ないようですということになりますが
間違いなく出来ると言うなら、書き換えるバイナリアドレスを教えてください。

>>851
取り違えられているようなので、今一度説明します。
問題は、拡張子によって実行コマンドを変える方法ではなく、
.wsfの拡張子を変更した物を渡して実行させる方法です。

他人の目を欺く偽装ではなく、自分の環境での話なので、
拡張子によって実行コマンドを変える部分は関連付けの変更により既に解決しています。
847でも書いた通り、問題は関連付けで既定動作(つまりダブルクリックやEnterキー押下で
wscript.exeやcscript.exeに渡るよう)にした上で、渡されたファイルが実行されないことです。

そのバッチも無意味で、.vbsを.unkoとしたものなら
IF %~x1==.unko cscript.exe //X //E:VBScript %1
で実行されますが、.wsfを.unkoとしたものでは>>847の2行目で書いたエラーが出るだけです。

>>853
妥協策としてはショートカットよりはラッパーを選びます。



今のところ、可能であるなら>>849が最有力候補です。
他人のPCで実行させる話ではなく自分のPCでの話なので、システムフォルダ内や関連付けは
自由に弄れますから、>>849が可能なら解決です。

856:デフォルトの名無しさん
09/03/30 19:57:32
なんでそんなことしたいん?

857:847
09/03/30 20:10:23
>>856
最初にも書いた通り、
> 拡張子毎にcscript.exe実行やデバッガ実行などを既定動作にしたい
からです。

vbsの拡張子をvbcに変えた物を既定でcscript.exe実行に定義する「VBCFile」と同じです。
URLリンク(www.vector.co.jp)
> .VBS、.JSファイルはWScript.EXEか、CScript.EXEのいずれか既定値で起動されます。
> 既定値は変更できますが、すべてのスクリプトファイル起動方法が一律に変わります。
> 例えば、大部分のスクリプトファイルはWScript.EXEで起動し、一部のスクリプトファイルだけを
> CScript.EXEで起動したい、というような使い分けが出来ません。
> そこで、CScript.EXEで起動する専用の拡張子を別に作ります。
> 「.VBS」に対して「.VBC」、「.JS」に対して「.JSC」です。

これを.vbsや.jsではなく.wsfでやりたいというだけの話です。

858:デフォルトの名無しさん
09/03/30 20:13:00
前スレか他スレで昔やってたやついたよ。

859:デフォルトの名無しさん
09/03/30 20:15:14
未解決の前例なんて無いのと同じ

860:デフォルトの名無しさん
09/03/30 20:25:38
wshext.dll内に.wsfがあるけど

861:847
09/03/30 20:42:51
>>858
確認してみましたが、>>859さんの言う通り、未解決のまま立ち消えのようです。

>>860
?script.exe以外だと、別拡張子が実行できるようになったとしても
今度は.wsfが実行できなくなって、本来の目的である使い分けが出来ないということになりませんか?

862:デフォルトの名無しさん
09/03/30 20:48:16
VectorにWSFFileがあるだろ

863:847
09/03/30 21:26:06
>>862
ありがとうございます。おかげさまで解決しました。
VBCFileと同じ作者のものなのに見逃してました。

864:デフォルトの名無しさん
09/03/31 00:57:39
吉岡さんは神

865:デフォルトの名無しさん
09/03/31 01:39:03
MVP落ち

866:デフォルトの名無しさん
09/03/31 23:43:58
バイナリ書き替えなくても>>850でできるのでは?

867:デフォルトの名無しさん
09/04/01 18:39:59
うん

868:デフォルトの名無しさん
09/04/01 18:55:59
無理

869:デフォルトの名無しさん
09/04/01 19:06:06
有理

870:デフォルトの名無しさん
09/04/01 22:03:54
実際に試してから書いた方がいいぜ

871:デフォルトの名無しさん
09/04/02 00:27:23
遅レスだけど、レジストリエディタで↓を参照。>847

HKEY_CLASSES_ROOT\.WSF
HKEY_CLASSES_ROOT\WSFFile\Shell\Open\Command

872:871
09/04/02 00:30:51
ちなみにVistaだとコンテキストメニューに「コマンドプロンプトで開く」ってのが
標準装備されてますな。

873:デフォルトの名無しさん
09/04/02 00:32:25
>>847を読み直したほうがいいぜ

874:デフォルトの名無しさん
09/04/02 14:37:34
なるほど

875:デフォルトの名無しさん
09/04/02 15:48:38
なるほど っていいたいだけだろ

876:デフォルトの名無しさん
09/04/02 15:56:29
なるほど

877:デフォルトの名無しさん
09/04/06 14:45:01
すみません、以前どこかで見たことがあるような気がするんですが
けっきょく捜しきれなかったので質問させていただきます

LAN内のほかのマシンで実行中のアプリ(MSAccess)をリモートから強制終了
させるVBSってのが知りたいのです

878:デフォルトの名無しさん
09/04/06 14:47:07
あれれ、質問なのにSageちゃった
ごめんなさい
あげさせてもらいますね

879:877
09/04/06 16:50:49
自己解決しました。

880:877
09/04/06 17:23:52
877です。
879は、私ではありません。

881: ◆877pupbpBk
09/04/06 17:33:07
本物の877です。
879は、私ではありません。
880も、私ではありません。

とは言え自己解決はしてますのでもう消えます。
この状況ではこの後も私の偽物が出てくるかも知れませんが
以後放置してくださって結構です。


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