Windows Batch Scripts

「あの処理はあの言語でどう書くの?」のまとめ。

Call From Windows Batch

Windows Batch から各スクリプトを呼び出す方法

Rem 同プロセスで呼ぶ
Call "script.bat"

Rem 別プロセスで呼ぶ
Start "script.bat"
PowerShell.exe -ExecutionPolicy RemoteSigned -F "script.ps1"
Rem Msys の場合
"C:\msys\bin\sh.exe" --login -i "script.sh"
CScript //NoLogo //E:VBScript "script.vbs"
CScript //NoLogo //E:JScript "script.js"
Rem コンパイルした exe ファイルが存在していたら削除する
If Exist "script.exe" ( Del "script.exe" )

Rem コンパイラでコンパイルする
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" "script.vb"

Rem コンパイルできたら実行する
If "%ERRORLEVEL%" == "0" ( "script.exe" )
Rem コンパイルした exe ファイルが存在していたら削除する
If Exist "script.exe" ( Del "script.exe" )

Rem コンパイラでコンパイルする
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\jsc.exe" "script.js"

Rem コンパイルできたら実行する
If "%ERRORLEVEL%" == "0" ( "script.exe" )
Rem コンパイルした exe ファイルが存在していたら削除する
If Exist "script.exe" ( Del "script.exe" )

Rem コンパイラでコンパイルする
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "script.cs"

Rem コンパイルできたら実行する
If "%ERRORLEVEL%" == "0" ( "script.exe" )

Template

オレオレテンプレート。

@Echo Off

Rem ココにコード

Pause
Exit /b
# ココにコード

Read-Host Please Enter key to continue...
Exit
#!/bin/bash

# ココにコード

read -p "Please any key to continue... " -n 1
exit
Option Explicit

' ココにコード

WScript.Echo("Please Enter key to continue...")
WScript.StdIn.ReadLine()
WScript.Quit()
// ココにコード

WScript.Echo("Please Enter key to continue...");
WScript.StdIn.ReadLine();
WScript.Quit();
Imports System

Module Module1
  Sub Main()
    ' ココにコード
    
    Console.WriteLine("Please Enter key to continue...")
    Console.ReadKey()
    Environment.Exit(0)
  End Sub
End Module
import System;

// 即時関数は必須ではないけど…
(function() {
  // ココにコード
  
  Console.WriteLine("Please Enter key to continue...");
  Console.ReadKey();
  Environment.Exit(0);
})();
using System;

class CSharp {
  public static void Main() {
    // ココにコード
    
    Console.WriteLine("Please Enter key to continue...");
    Console.ReadKey();
    Environment.Exit(0);
  }
}

Echo

コンソールに文字列を出力する。

Echo FooBar
Echo ほげピヨ
Write-Output FooBar
Write-Host ほげピヨ
echo FooBar
echo ほげピヨ
WScript.Echo("FooBar")
Wscript.StdOut.Write("ほげピヨ")

' カッコがなくても OK
WScript.Echo "FooBar"
Wscript.StdOut.Write "ほげピヨ"
WScript.Echo("FooBar");
Wscript.StdOut.Write("ほげピヨ");
Imports System

Console.WriteLine("FooBar")
Console.WriteLine("ほげピヨ")
import System;

print("FooBar");
Console.WriteLine("ほげピヨ");
using System;

Console.WriteLine("FooBar");
Console.WriteLine("ほげピヨ");

Sleep

指定時間処理を一時停止する。

3秒停止させるサンプル。

Ping localhost -n 4
Timeout 3

Rem sleep.exe を持っていれば
Sleep 3
Start-Sleep -s 3
sleep 3
WScript.Sleep(3000)
WScript.Sleep(3000);
Imports System

System.Threading.Thread.Sleep(3000)
import System;

System.Threading.Thread.Sleep(3000);
using System;

System.Threading.Thread.Sleep(3000);

Pause

ユーザからのキー入力を待つ。

Pause
Rem => 続行するには何かキーを押してください . . .
Read-Host "続行するには Enter キーを押してください。"
read -p "続行するには何かキーを押してください。" -n 1
WScript.Echo "続行するには Enter キーを押してください。"
WScript.StdIn.ReadLine
WScript.Echo("続行するには Enter キーを押してください。");
WScript.StdIn.ReadLine();
Imports System

Console.WriteLine("続行するには Enter キーを押してください。")
Console.ReadLine()
import System;

Console.WriteLine("続行するには Enter キーを押してください。");
Console.ReadLine();
using System;

Console.WriteLine("続行するには Enter キーを押してください。");
Console.ReadLine();

Comment

スクリプト内でのコメント。

Rem コメント

:: コロン「:」はラベルを表すのでコメント代わりに使える
# 1行コメント

<# 複数行コメント
終わり #>
# コメント
' シングルクォートでコメント
// 1行コメント

/* 複数行コメント
終わり */
' シングルクォートでコメント

''' ドキュメントコメント
// 1行コメント

/* 複数行コメント
終わり */

/// ドキュメントコメント
// 1行コメント

/* 複数行コメント
終わり */

/// ドキュメントコメント