はじめに 現在でも、Windows環境を用いたレガシーなプロジェクトでは根強く生き続けているWindowsバッチを使用したアプリ。 他のアプリと比べても癖が強く、理解できないよう謎の仕様も多々あります。 その謎の仕様で最たるものが、今回紹介する「遅延環境変数」(遅延環境変数の展開)と呼ばれるものです。 今回はその謎の仕様である「遅延環境変数」を簡単におさらい、整理します。 まずはこれを見てください
はじめに 最近、初めてバッチファイルでコードを書くことになったのですが、他の言語の仕様に慣れていたせいか(いま思うとくだらない)構文エラーにひどく悩まされました。自由度の低い事この上ない! bat関連の記事ではよく「バッチはクソ」みたいに毒づいているのを見かけますが、その意味を少しだけ痛感した今日この頃です...(苦笑) 今回は、私自身が実際に悩まされた構文エラーエトセトラと、今回の経験で得た(私のようなプログラミング初心者が)バッチファイルでコーディングする上での教訓(初歩的)を書き留めたいと思います。 この記事が誰かの役に立てば幸いです<(_ _)> ==========【目次】========== 構文エラーエトセトラ ・rem の使い方が誤っています。 ・elseは)と同じ行に書かないとエラーになる ・echo の出力文字の中に半角( )を使用しない ・if文の( )の中が空だとエ
rem hoge.txtの行数を取得してLINECOUNTに代入するコマンド for /f "usebackq" %%A in (`type hoge.txt ^| find /c /v ""`) do set LINECOUNT=%%A echo %LINECOUNT% め、面倒臭え……。 素直に「変数=`コマンド`」じゃいかんのかと思うけどこう書くらしい。 また「`コマンド`」内でパイプ「|」を使う場合はエスケープが必要で「^|」と書く。 ちょっと応用して、指定したフォルダ下にあるテキストファイルの名前、行数、サイズのリストを取得するバッチの例。 rem 入出力設定 set DIR=%~dp0data set OUTPUT=%dp0count.txt if exist %OUTPUT% del %OUTPUT% rem カウント出力処理 setlocal enabledelayedex
Internet Explorer のプロキシ設定の中で、プロキシを使用しないアドレスを例外として設定する項目があります。 ここの設定値を確認して指定したアドレスが含まれていない場合にここに追加する方法です。 今回のサンプルはかなりピンポイントですが、汎用的に説明すると以下のようなことをします。 レジストリのデータを取得 そのデータに指定した文字列が含まれるかチェック 含まれていない場合は文字列を追加 【コマンド】 rem 現在のプロキシの例外設定を取得し、変数「VAL1」へセット。 FOR /F "TOKENS=1,2,*" %%I IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride"') DO IF "%%I"==
説明 使い方 説明 Windowsのリモートデスクトップ接続(mstsc.exe)を使用して、サーバーやリモートPCにリモートデスクトップ接続する際に、初回接続時にユーザー名とパスワードを要求されて認証が必要になってしまいますが、資格情報を事前に指定することで、資格情報の要求なしに接続することが出来ます。 システム管理をしていると、GUIで操作をしていると何かと煩雑になることがあるので、これをバッチにしておき、毎回認証要求なしにリモートデスクトップ接続をできるようにしました。 また、初めてリモートデスクトップ接続先サーバーに接続した際に「このリモートコンピュータの IDを識別できません。」のメッセージが出ることがあるので、あらかじめレジストリにキーを追加しておき、メッセージの表示を回避します。(ポリシーの設定により出ない場合もあります) なお、バッチファイルではリモートデスクトップ接続後に
set hosts=c:\windows\system32\drivers\etc\hosts set hoststmp=c:\windows\system32\drivers\etc\hosts.tmp copy %hosts% %hoststmp% notepad %hoststmp% copy %hoststmp% %hosts% pause # # Powershell script for adding/removing/showing entries to the hosts file. # # Known limitations: # - does not handle entries with comments afterwards ("<ip> <host> # comment") # $file = "C:\Windows\System32\drivers\etc\ho
並べ替えはデータベースやExcelの仕事? データの並べ替えが必要な場面は意外と多い。データベースやExcelを起動して、ソートを実行することも多いと思う。データによっては、データベースやExcelの起動を待っている間に、コマンドを使ってサックリとソートが実行できる。 ほとんどはExcelで済ますが、全てではない! データを一定の基準に従って並べ替えるというニーズは、世の中の至るところにある。例えば、入力順の取引データを決済日付順に並べ替えたり、あいうえお順に並ぶ名簿を会員番号順に並べ替えたりするようなケースだ。 こうした並べ替えは、一般に業務システムやデータベース管理システムといったデータを扱うアプリケーション側に機能として組み込まれていることも多い。だが、何らかの理由により自前で並べ替えなければならない事態に直面することもある。 筆者はそうしたとき、ほとんどの場合、「Microsoft
Whether clearing out your Downloads or organizing your tax receipts, you can automate the process with these easy techniques. Do you want to automatically move files from one folder to another on your Windows or Mac computer? Well, you can do it pretty easily on both types of computer. This guide covers how to automate your file transfer tasks on Windows and macOS. Why Move Files From One Folder t
はじめに Python? PHP? いやいや、そんなオサレなものではなく、ここで取り上げるのは今そこにあるWindowsバッチです。 たまたま最近Windows Server周りの管理やWindowsを使ったバッチ運用の仕組み作りに携わることがあり、今更ながらWindowsバッチと格闘することになったので、備忘録としてまとめます。 Unix系のシェル・スクリプトに慣れているとWindowsバッチは結構クセがあって使いづらいと思います。VBScriptも今更な感じだし本命はPowerShellなのかなと思いますが、PowerShellはパッと見とっつきにくそうで拒絶反応が出ました。 手軽にグーグル先生に頼れない現場環境であったということもあり、手っ取り早くWindowsバッチを使ってみたという感じです(Windows10だとbashが使えるらしいので早くそういう環境が広がってほしいんですが.
読者ポールさんが教えてくれた、バッチファイル内で相対パスが使えるようになるというなかなか興味深いTipsをご紹介。 現在のパスを示す特殊コードを使って可能になるそうですが、フラッシュドライブにあるバッチファイルなどにはかなり便利かも。 過去にUSBスティックを起動させるショートカットを作成、というちょっと似た記事をアップしましたが、どのパソコンに差し込んでも読み込まれるバッチファイルへのフルパスが必要な場合、%~dp0をバッチファイルの現行パスを使いたい場所に置き換えてやれば良いそうです。 ポールの解説するところによれば... "%~dp0" (""は不要)をバッチファイルで使用すると、バッチファイルパスが指定されます。 例えば: SET MAC=00:00:00:00:00:00 %~dp0mc-wol.exe %MAC% MC-WOL.EXEはWake On LANプログラムで、PCの
バッチファイル内であるアプリケーションの戻り値(返り値)を取得したい場合は そのアプリケーションを実行した後%ERRORLEVEL%で取得できる 仮に 何かファイルを渡して、処理が成功すれば0が返り、失敗すれば1が返るhoge.exeというのがあったとして
今回は、forと双璧を為すバッチファイル界の魔境、遅延環境変数に挑みたいと思います。 1.遅延環境変数とは? さて、大分前に投稿した.bat(バッチファイル)のforコマンド解説。の中で、次のようなことを述べました。(見なくても問題ないです) 特に遅延環境変数については、for文を使う上でほぼ確実に理解する必要が出てくると思われます。 その理由を説明するには、バッチファイルでの「変数を読み込むタイミング」について知っておく必要があります。 変数の読み込みタイミング 次のコードをご覧下さい。 ちなみに、このページ内にあるコード表示は、そのままコピー&ペーストでバッチファイルとして動くようになっています。 実行しても、ええんやで。 さて、話を戻して…。上のコード、実行結果はどうなると思いますか? まず最初はnumが1なので、if文は真になりますね。ここまでは特に大したことはありませんが…。 i
Windowsのバッチファイルで、FTPコマンドを使用してFTP接続とファイルの取得・転送(ダウンロード・アップロード)する場合、FTPコマンドのテキストファイルを用意するという少し変わったやり方になります。 実際にやってみました。 なお、今回のバージョンは以下です。 Windows 7 Professional SP1(64bit) FTPコマンドのバッチファイルFTPコマンドの主なオプションは、以下のようです。 「-i」…対話的なメッセージ表示を無効にする。「-s:filename」…FTPコマンドを記述したテキストファイルを指定する。FTPの開始後に自動実行される。で、実際のバッチファイルは以下のようになります(「REM」はコメント行です)。 コマンドプロンプトを終了すると、何が実行されたかわかりにくいので、「cmd」で終了しないようにしています。 REM FTP接続 FTP -i
Windows タスクスケジューラーから、Powershellスクリプトを定期的に実行させる場合の設定方法を、すぐに忘れてしまいます(^^; 備忘録まで 操作: プログラムの開始 設定: プログラム/スクリプト %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe 引数の追加 -Nologo -NoProfile -ExecutionPolicy Unrestricted -Command `& { C:\Scripts\Job.ps1; exit $lastexitcode }` ※戻り値を取得する目的で、exit $lastexitcode は追加しています Powershellヘルプ ヘルプも合せてご確認ください♪ > @powershell /? PowerShell[.exe] [-PSConsoleFile <フ
はじめに 2016年にこんな記事を書きました。 Big Sky :: Windows ユーザは cmd.exe で生きるべき。 [D] Windowsはターミナルがダメだから使えないってのは過去の話? 基本的にはいい感じに見えますが、いくつか問題は発覚してます。 http://blog.drikin.com/2015/01/w... https://mattn.kaoriya.net/software/why-i-use-cmd-on-windows.htm この記事は日常からコマンドプロンプトを使うユーザに Windows で生き抜く為の僕なりの方法を教授したつもりです。最近は PowerShell を使われる方も多いと思いますが、僕はどうしても PowerShell が好きになれず、未だにコマンドプロンプトで生き続けています。 あれから4年 記事の反響は結構大きく、いろいろなコメントも
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く