サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
scripting.cocolog-nifty.com
複数ファイルをドロップしたり、「貼り付け」たり、「SendTo」メニューに送ったとき、 アプリの引数に現れる順序は、ドラッグしたり、右クリックしたときに、 マウスでポイントしていたファイルが先頭です。残りは選択項目の並びで続きの順序です。 選択項目の途中をポイントしていたときは、末尾で先頭にラップラウンドします。 例えば、 ■ファイル1 □ファイル2 ■ファイル3 □ファイル4 ■ファイル5 で、ファイル1、3,5を選択して、ファイル3にマウスを置いてドラッグまたは 右クリックで「コピー」や「送る」を選択した場合、 アプリには、ファイル3,5、1の順に引数が渡ります。
マイクロソフトのサイトを探しても表示名の説明がどこにもないので、困ったものです。 例えば、エクスプローラで C:\Users\%username%\Favorites を開くと、アドレスバーに %username%▲お気に入り▲ と表示されますが、アドレスバーの右余白をクリックすると、 C:\Users\%username%\Favorites と表示されます。 ここで、 お気に入り は表示名です。 ファイルシステム上の名前は Favorites です。 表示名はシェル(エクスプローラ)がファイルシステム上の名前の代わりに表示しています。 その仕組みは、 フォルダにreadonly属性を付ける。 フォルダ内に隠しファイルdesktop.iniを置いて、その中に表示名を定義する。 参照: How to Customize Folders with Desktop.ini フォルダとファイルで
renameコマンドのワイルドカードの「仕様」が「正しく」書いてあるところがないようです。 ren 旧ファイル名 新ファイル名 旧ファイル名のワイルドカードは、普通の解釈のとおり。 新ファイル名のワイルドカードは、普通の解釈と異なる! 基本形1 abc* 左から3文字(3バイトではなく)をabcに変えて、4文字目以降は元ファイル名を変えない。 基本形2 *xyz 元ファイル名を右から探して最初のxを見つけて、そこから右をxyzに変える。 元ファイル名にxがないときは末尾に追加。 応用形1 abc*xyz 基本形1と基本形2の組み合わせ。つまり、 左から3文字(3バイトではなく)をabcに変えて、 元ファイル名の4文字目以降を右から探して最初のxを見つけて、そこから右をxyzに変える。 元ファイル名の4文字目以降にxがないときは末尾に追加。 応用形2 *xyz* 基本形2と基本形1の組み合わ
簡単で確実なのは、属性をチェックすることです。 属性は、バッチ変数かFOR変数の%~a1で取り出せます。 drahs---- 先頭のdをチェックします。 次のバッチファイルでは、環境変数の操作で先頭1文字を取り出します。 IsFolder.CMD フォルダかファイル @ECHO OFF SETLOCAL SET A=%~a1 IF %A:~0,1%==d ECHO フォルダです。 IF %A:~0,1%==- ECHO ファイルです。 次のバッチファイルでは、FOR /F文のeol文字(行頭コメント文字)を利用します。 IsFolder.CMD フォルダかファイル @ECHO OFF FOR /F "eol=-" IN ("%~a1") DO ECHO フォルダです。 FOR /F "eol=d" IN ("%~a1") DO ECHO ファイルです。 また、バッチファイルの中では、 FO
VBScriptからVBAに焼き直し。 Option Explicit Sub MakeZIP(ZIPfile As String, ParamArray Files() As Variant) Dim fso As Object Dim Shell As Object Dim zFolder As Object Dim Path As Variant Dim FileName As String Dim sFolderItem As Object Dim zFolderItem As Object Dim Count As Long Dim Ans As Long Set fso = CreateObject("Scripting.FileSystemObject") If UCase(fso.GetExtensionName(ZIPfile)) <> "ZIP" Then MsgBox
if exist "%systemroot%\sysnative\" ( echo 32bit on 64bit ) else if exist "%systemroot%\syswow64\" ( echo 64bit on 64bit ) else ( echo 32bit on 32bit ) 64bit osで、 if exist "%systemroot%\syswow64\" (echo 64bit os) else echo 32bit os 32/64bit exeから、32bit exeを起動するには、 %systemroot%\syswow64\cmd.exe 32bit exeから、64bit exeを起動するには、 %systemroot%\sysnative\cmd.exe 64bit exeから、64bit exeを起動するには、 %systemroot%\sy
start echo aaa start aaa.cmd などは、cmd/kで起動されるので、コンソールが閉じません。 コンソールを閉じるためにexitを入れるなんぞは本末転倒です。 バッチファイルや内部コマンドは、start cmd /cで。 start cmd /c echo aaa start cmd /c aaa.cmd
「ファイル名を指定して実行」からコマンドプロンプトを「管理者として実行」する。 powershell start-process -verb runas cmd 「ファイル名を指定して実行」からコマンドラインを「管理者として実行」する。 powershell start-process -verb runas 'コマンド名' '引数' 例えば、 powershell start-process -verb runas cmd '/c cmd'
バッチファイルでは、%は、%%でエスケープされる。 %~%は、環境変数がなくても置換される。 もし、環境変数がなければ、空と置換されて、%~%が消える。 コマンドプロンプトでは、簡単なエスケープ方法はない。 環境変数がなければ置換されずに、そのまま残る。 これを利用してエスケープする。 コマンドプロンプトで、%をエスケープするには、%の直後に^や継続行を入れる。 ECHO %^CD% や ECHO %^(改行) More ? CD% は、 %CD% と出る。 前者は^CDという環境変数がないことを利用している。当然、 SET "^CD=bbb" のようにして、^CDという環境変数があると置換される。 引用符("~")内では、%はエスケープされないが、^はエスケープされることに注意。 ECHO "%^CD%" は、 "%^CD%" と出る。 ただし、引用符の前に^を付けると、^"~^"内の^
CALLと%*で行頭と行末の空白を削除します。 SET a= aaa bbb ECHO "%a%" CALL :SUB %a% ECHO "%a%" GOTO :EOF :SUB SET a=%* 行末の空白を削除する正攻法は、 SET a= aaa bbb ECHO "%a%" :LOOP if "%a:~-1%"==" " ( SET a=%a:~0,-1% GOTO LOOP ) ECHO "%a%" この場合、遅延展開は特に必要ありません。
最初から、 openwith.reg Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\openwith.cmd\shell\open\command] @="openwith.exe \"%1\"" を結合しておく。 .xxx ファイルの「プロパティ」、「プログラム」欄の右、「変更」ボタン、「その他のアプリ」、「アプリの選択」に関連付ける。 もし、exeファイルの関連付けを変えると、exeファイルの起動が別のアプリの起動になる。 それは大変なので、変えられないようになっている。 なのに、変えたというトラブルがなくならない。共通してるのは、 exeファイルをダウンロードして、起動すると、アプリ選択が出て、選択した。 たぶん、ダウンロード直後は、セキュリティスキャンで、起
以下のショートカットファイルを作成します。 RunAsAdmin.lnk リンク先 : %SystemRoot%\system32\cmd.exe /c start "コマンド プロンプト" 作業フォルダ : なし 実行時の大きさ: 最小化 詳細設定 : 管理者として実行 使用法は、 RunAsAdmin.lnk アプリ [引数...] ショートカットファイルなどをRunAsAdmin.lnkにドロップしてもおk。 ところで、「管理者として実行」すると、作業フォルダが %SystemRoot%\system32 に勝手に変更されます。 そんなときは、 RunAsAdmin.lnk /d 作業フォルダ アプリ [引数...] 例えば、作業フォルダを引き継いでコマンドプロンプトを開くなら、 RunAsAdmin.lnk /d "%cd%" cmd デスクトップでコマンドプロンプトを開くなら、
もし、64bit osで32bitで起動されたら、自身を64bitで起動し直す。 If InStr(LCase(WScript.FullName),"syswow64") Then CreateObject("WScript.Shell").Run """" & Replace(LCase(WScript.FullName),"syswow64","sysnative") & """ """ & WScript.ScriptFullName & """" WScript.Quit End If もし、64bit osで64bitで起動されたら、自身を32bitで起動し直す。 If InStr(LCase(WScript.FullName),"system32") Then If CreateObject("Scripting.FileSystemObject").FileExists(Re
メニューから変更できなくなったので。 アドレスバー非表示.vbs Set Shell=CreateObject("Shell.Application") For Each ie In Shell.Windows() If InStr(LCase(ie.FullName),"iexplore.exe")=0 Then ElseIf ie.AddressBar Then ie.Visible=False ie.AddressBar=False ie.Visible=True End If Next アドレスバー再表示.vbs Set Shell=CreateObject("Shell.Application") For Each ie In Shell.Windows() If InStr(LCase(ie.FullName),"iexplore.exe")=0 Then ElseIf ie.
unixのteeコマンド擬似をバッチファイル機能だけで作ります。 tee.CMD 出力ファイル @ECHO OFF SETLOCAL SET X=%* IF NOT DEFINED X ( ECHO Usage: %~nx0 出力ファイル GOTO :EOF ) IF "%~0"=="%~dp0.\%~nx0" GOTO :SUB MORE >%1 | "%~dp0.\%~nx0" %1 GOTO :EOF :SUB SET SS=0 SET LL=0 :TOP IF %SS%==%~z1 ( rem SLEEP 1 ping localhost -n 2 >NUL CMD /C "TYPE NUL>>%1" 2>NUL IF NOT ERRORLEVEL 1 GOTO :EOF GOTO :TOP ) SET SS=%~z1 FOR /F "delims=[] tokens=1*" %%
「空のファイルを作る。」 CALL >ファイル TYPE NUL >ファイル ※ 出力のない内部コマンドとリダイレクションを使う。 ※ 「概要」(SummaryInfo)などは消える。 COPY [/Y] NUL ファイル ※ 上書きが有り得るときは/Y。 ※ 「概要」(SummaryInfo)などは元のまま残る。 × ECHO; >ファイル ※ 改行が入るので、駄目。 「改行のある文字列を出力する。」 × ECHO %変数% ※ 空の文字列で、「ECHO は <ON> です。」 ECHO;%変数% ※ 空の文字列が有り得るときは区切文字=,;+/[]を使う。 「改行のない文字列を出力する。」 SET /P X=文字列<NUL SET /P X=文字列<NUL >ファイル SET /P X=文字列<NUL >>ファイル 「ステータスバー擬似が可能。」 ********** のような棒グラフ
「ソースの表示」や「名前を付けて保存」で得られるのは、オリジナルなHTMLソースで、IEで表示中のアクティブなHTMLソースはどうしたら得られるか? 「印刷プレビュー」します。このとき、 保護モード無効のページなら、 %Temp% 保護モード有効のページなら、 %Temp%\Low に、2OE67IIM.htm のような 英大文字数字8桁.htm のファイルが一時的に出来ます。 これを開いて、「完全」や「アーカイブ」で保存したり、メモ帳で開くなり、コピーするなりします。
ミュート オン、オフを切り換える。 ToggleMute.vbs Set wShell=CreateObject("WScript.Shell") wShell.Run "sndvol.exe" Do While Not wShell.AppActivate("音量ミキサ") WScript.Sleep 100 Loop wShell.SendKeys "%m{esc}" ミュート オンに切り換える。 MuteOn.vbs Set wShell=CreateObject("WScript.Shell") wShell.Run "sndvol.exe" Do While Not wShell.AppActivate("音量ミキサ") WScript.Sleep 100 Loop wShell.SendKeys "{up}{down}%m{esc}" ミュート オフに切り換える。 MuteOf
IE7/IE8で、IEオブジェクトがアクティブなタブか?の判定 Function TabIsActive(ie) ie.StatusText=CStr(ie.HWND) TabIsActive=(ie.StatusText=CStr(ie.HWND)) ie.StatusText="" End Function ie.StatusTextを変更可能なのは、アクティブなタブだけなので、試しに変更してみる。 変更文字列には、ie.HWNDを乱数代わりに使います。 判定できるのは、そのIEウィンドウ内でアクティブなタブか、であって、そのIEウィンドウがアクティブかどうかは不明です。
バッチファイルの先頭に以下の3行を追加します。 call :main %* 4>>%0 goto :eof :main
以前は、Shortcut.exeがありましたが、最近は、入手困難です。 そこで、コマンドラインで、ショートカット(.lnk)とインターネットショートカット(.url)を作成、変更、表示するバッチファイルです。 shortcut.cmd [/t:TargetPath] [/a:Arguments] [/w:WorkingDirectory] [/s:WindowStyle] [/k:HotKey] [/i:IconLocation] [/d:Description] name.{lnk|url} @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" %* GOTO :EOF @end var TargetPath; var Arguments; var WorkingDirectory; var WindowStyle; v
バッチファイルをCMD/Cで起動するコマンドラインを作れば、 バッチファイルの実行結果をファイルに残すことは出来ます。 しかし、バッチファイルだけで、ダブルクリックなどで、 そのまま起動して、自身の実行結果をファイルに残すことは 出来ません。 そこを、起動されたら自身の実行結果をファイルに残します。 (方式-1) バッチファイルの先頭に以下の3行を付加します。 call :main >"%~dp0LOG.TXT" 2>&1 <nul %* goto :eof :main ここでは、バッチファイルと同じフォルダの"LOG.TXT"を指定しています。 ファイル名や上書き/追加書き、標準エラーを別ファイル、は好きにしてください。 もし、バッチファイル内のコマンドで、コンソールに出力したり、 コンソールから入力するときは、 >&3 2>&3 <&3 のようにリダイレクトしてください。 コンソールか
FolderSize.CMD フォルダ...(ワイルドカード可) @echo off setlocal for /d %%0 in (%*) do ( for /f "tokens=1-3 delims= " %%1 in ('dir /s /a-d %%0') do if %%2==個のファイル set size=%%3 call echo;%%size%% %%0 )
シフトJISのCSVファイルをImport-CSVすると、文字化けします。 なぜか、Import-CSVコマンドレットには、-Encodingパラメタがありません。 なので、 Import-CSV CSVファイル の代わりに、 Get-Content CSVファイル | CovertFrom-CSV を使います。 Get-Contentコマンドレットには-Encodingパラメタがありますし、また、文字コードを自動認識するようです。
IsIL.cmd for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i echo %LEVEL% ここで、 High 管理者として実行 Medium 標準ユーザ Low 「整合性レベル:低」 (「保護モード:有効」)
昔のWSHでは、以下のように標準入力からスクリプトを取り込めました。 CScript.exe //E:VBScript - MsgBox "ほげ" ^Z echo WScript.Echo('ほげ');|WScript.exe //E:JScript - それを、"-"というファイルを作って代替します。 '';eval(WScript.StdIn.ReadAll());/* Execute WScript.StdIn.ReadAll Rem*/
関連付けのRunAsを起動する方法では、UACダイアログが出ます。 SchTasksコマンドを使えば、サイレントに昇格できます。 「管理者として実行」された、タスクスケジューラやコマンドプロンプトからSchTasksコマンドでタスクを登録しておきます。 schtasks /create /tn hoge /tr "cmd" /sc once /st 00:00 /it /rl highest 「管理者として実行」されてない、バッチファイルなどのコマンドラインから、そのタスクを実行します。 schtasks /run /tn hoge このとき、UACダイアログは出ません。 タスクスケジューラでは、/rl highestは、 ■最上位の特権で実行する
100ミリ秒待つのに、Excelマクロを使えば、 Application.Wait [NOW()+"0:00:00.1"] VBAだけで、 秒の誤差があってよければ、 Application.Wait CDbl(Now) + (Timer - Fix(Timer)) / 24 / 60 / 60 + CDbl(1) / 24 / 60 / 60 / 10 更に、秒の誤差がでないようにするには、 Do dt = Now tm = Timer Loop While dt <> Now Application.Wait CDbl(dt) + (tm - Fix(tm)) / 24 / 60 / 60 + CDbl(1) / 24 / 60 / 60 / 10 リトライは、例えば、Now=1秒9とTimer=2秒1が合成されて、1秒1となるのを防ぎます。 以下は要注意です。 Application
PowerShell 2.0があれば、バッチファイルからそのコンソールウィンドウを非表示/最小化/最大化/元に戻す。 コンソールウィンドウを非表示にします。 PowerShell -WindowStyle Hidden -Command Exit コンソールウィンドウを最小化します。 PowerShell -WindowStyle Minimized -Command Exit コンソールウィンドウを最大化します。 PowerShell -WindowStyle Maximized -Command Exit コンソールウィンドウを元に戻します。 PowerShell -WindowStyle Normal -Command Exit バッチファイルだけでなく、PowerShellスクリプトでも同じです。
次のページ
このページを最初にブックマークしてみませんか?
『Windows Script Programming』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く