Windowsのバッチファイルで作業を自動化しているとき、「生成した情報をクリップボードに入れて、すぐどこかに貼り付けたい」と思ったことはありませんか?そんな場面で活躍するのが clip.exe というWindowsの標準コマンドです。
clip.exe は、パイプやリダイレクトで渡したテキストをクリップボードに格納できるシンプルなツールです。追加インストール不要でWindows XP以降すべての環境に搭載されており、バッチファイルと組み合わせるだけでコピー操作を完全に自動化できます。
この記事では、clip.exe の基本から、文字列・変数・ファイル内容・コマンド出力のコピー方法、さらに文字化け対策やPowerShellとの連携まで、実践的なサンプルコードと一緒にすべて解説します。読み終えた後には、クリップボード操作をバッチファイルに組み込む技術が完全に身についているはずです。
clip.exe の基本と仕組み
clip.exe は Windows に標準搭載されているコマンドラインツールで、標準入力(stdin)から受け取ったテキストをクリップボードに書き込むという単純明快な動作をします。単体で起動するとキーボード入力待ちになるため、必ずパイプ(|)またはリダイレクト(<)と組み合わせて使います。
clip.exe の動作フロー
テキストソース ──[パイプ/リダイレクト]──> clip.exe ──> クリップボード
例: echo Hello | clip
("Hello" という文字列がクリップボードに格納される)
clip.exe が受け取れるテキストソースは以下の3種類です。
clip.exe が受け取れる3種類のテキストソース
- パイプ(|):コマンドの出力を直接 clip に渡す(例:
echo text | clip)
- リダイレクト(<):ファイルの内容を clip に読み込ませる(例:
clip < file.txt)
- 標準入力:clip 単体起動時にキーボード入力を受け付ける(Ctrl+Zで終了)
clip.exe は引数としてファイル名を受け付けません。「clip file.txt」という書き方は動作しないので注意してください。必ずリダイレクト構文(clip < file.txt)を使います。
| 操作 |
構文 |
用途 |
| 文字列をコピー |
echo 文字列 | clip |
固定テキストのコピー |
| ファイルをコピー |
clip < ファイル名 |
テキストファイルの内容コピー |
| コマンド出力をコピー |
コマンド | clip |
コマンド実行結果のコピー |
文字列・変数をクリップボードにコピーする
最もシンプルな使い方は、固定文字列を echo コマンドと組み合わせる方法です。
固定文字列をコピーする
basic-copy.bat
@echo off
rem 固定文字列をクリップボードにコピー
echo Hello, World! | clip
echo クリップボードにコピーしました。
注意:echo コマンドは文字列の末尾に改行(CRLF)を付加します。「Hello, World!」とコピーしたつもりでも、実際には「Hello, World!\r
」がクリップボードに入ります。多くの場合は問題ありませんが、改行を含めたくない場面では後述の方法を使ってください。
変数の内容をコピーする
バッチファイルで最も実用的な使い方は、set コマンドで定義した変数の値をクリップボードに入れるパターンです。
variable-copy.bat
@echo off
setlocal
rem 変数に値をセット
set MESSAGE=https://example.com/dashboard
rem 変数の内容をクリップボードにコピー
echo %MESSAGE% | clip
echo コピー完了: %MESSAGE%
endlocal
注意:echo %変数% の書き方では、echo と変数の間にスペースが入り、コピーされる文字列の末尾にスペースが付くことがあります。スペースが気になる場合は echo(%変数%(echoと開き丸括弧を直結)とするとスペースなしで出力できます。
スペースなしで変数をコピーするテクニック
nospace-copy.bat
@echo off
setlocal
set URL=https://codingls.com
rem echo( を使うとスペースなしで出力できる
echo(%URL% | clip
echo URLをコピーしました。
endlocal
ポイント:echo( は undocumented な構文ですが、Windows XP 以降のほぼすべての環境で動作します。バッチファイルで末尾スペースを防ぎたい場面の定番テクニックです。
複数行テキストをクリップボードにコピーする
複数行のテキストをクリップボードにコピーしたい場合、単純に複数の echo | clip を並べても最後の1行しか残りません。複数行コピーにはグループコマンド(カッコでのグループ化)を使います。
multiline-copy.bat
@echo off
setlocal
rem 複数行をグループコマンドでまとめてclipに渡す
(
echo 1行目のテキスト
echo 2行目のテキスト
echo 3行目のテキスト
) | clip
echo 3行分のテキストをコピーしました。
endlocal
カッコで囲まれた複数の echo の出力が結合され、1つの入力として clip.exe に渡されます。これにより、クリップボードには3行のテキストが改行付きで格納されます。
変数を使った複数行コピー
multiline-var-copy.bat
@echo off
setlocal
set NAME=田中太郎
set EMAIL=tanaka@example.com
set TEL=03-1234-5678
rem 連絡先情報を複数行でコピー
(
echo 氏名: %NAME%
echo メール: %EMAIL%
echo 電話: %TEL%
) | clip
echo 連絡先情報をクリップボードにコピーしました。
endlocal
グループコマンドの注意点
- カッコの中で
echo を使う場合、行頭のスペース(インデント)はそのまま出力されます
- カッコの閉じ
) の後に | clip を書くのが正しい構文です
- 各 echo 行の末尾スペースもそのまま含まれるので注意
ファイル内容をまるごとコピーする
テキストファイルの内容全体をクリップボードにコピーするには、リダイレクト(<)を使います。これが clip.exe の最もシンプルかつ強力な使い方の一つです。
file-copy.bat
@echo off
setlocal
rem ファイルの内容をそのままクリップボードにコピー
clip < template.txt
echo template.txt の内容をコピーしました。
endlocal
ファイルの存在確認を追加した安全な書き方
safe-file-copy.bat
@echo off
setlocal
set FILE=C:\work\report.txt
rem ファイルの存在を確認してからコピー
if not exist %FILE% (
echo エラー: ファイルが見つかりません: %FILE%
exit /b 1
)
clip < %FILE%
echo コピー完了: %FILE%
endlocal
バッチファイル自身と同じフォルダのファイルをコピーする
バッチファイルの場所を基準にファイルを指定したい場合は %~dp0 を使います。
relative-file-copy.bat
@echo off
setlocal
rem %~dp0 = このバッチファイルが置かれているフォルダのパス(末尾に\あり)
clip < %~dp0template.txt
echo 同フォルダの template.txt をコピーしました。
endlocal
ポイント:%~dp0 はバッチファイルの実行場所に関わらず常にバッチファイル自身のディレクトリパスを返します。ファイルを相対パスで指定するより安全で、バッチファイルをどこに移動しても正しく動作します。
コマンド出力をクリップボードにコピーする
コマンドの実行結果をそのままクリップボードに格納できるのが clip.exe の便利な点です。ネットワーク情報やシステム情報の取得など、実用的な場面で多数活躍します。
よく使うコマンド出力のコピー例
command-output-copy.bat
@echo off
setlocal
rem IPアドレス情報をコピー
ipconfig | clip
echo IPアドレス情報をコピーしました。
pause
rem ログインユーザー名をコピー
whoami | clip
echo ユーザー名をコピーしました。
pause
rem カレントディレクトリのファイル一覧をコピー
dir /b | clip
echo ファイル一覧をコピーしました。
endlocal
ipconfig の特定情報だけをコピーする
ipconfig の出力全体ではなく、IPv4アドレスだけを抽出してコピーする方法です。
ipv4-copy.bat
@echo off
setlocal
rem IPv4アドレスを含む行だけを抽出してコピー
ipconfig | findstr "IPv4" | clip
echo IPv4アドレス情報をコピーしました。
endlocal
主なコマンドと用途一覧
| コマンド |
コピーされる内容 |
用途 |
ipconfig | clip |
全ネットワーク情報 |
ネット設定確認・共有 |
whoami | clip |
現在のログインユーザー名 |
ユーザー名のメモ |
hostname | clip |
コンピューター名 |
PC名のメモ |
dir /b | clip |
ファイル名一覧 |
ファイル構成の記録 |
dir /s /b | clip |
全サブフォルダのファイル一覧 |
フォルダ全体の構成記録 |
systeminfo | clip |
OS・ハード情報全般 |
システム情報の共有 |
netstat -an | clip |
ネットワーク接続状態 |
ポート使用状況の確認 |
tasklist | clip |
実行中プロセス一覧 |
プロセス状況の記録 |
文字コードと文字化けの仕組み
clip.exe を使っていると日本語が文字化けするケースがあります。この問題を解決するには、clip.exe の文字コード変換の仕組みを理解することが重要です。
clip.exe の文字コード変換フロー
文字コード変換フロー
テキストデータ
↓
コマンドプロンプトのコードページ(デフォルト: CP932 / Shift-JIS)
↓
clip.exe が受け取る(バイト列として受信)
↓
clip.exe がUTF-16 LEに変換してクリップボードに格納
↓
クリップボードのテキスト(CF_UNICODETEXT形式)
つまり、clip.exe はコマンドプロンプトのコードページ(通常はCP932 = Shift-JIS)で入力を受け取り、内部でUnicode(UTF-16 LE)に変換してクリップボードに格納します。
日本語が文字化けする原因のほとんどは、バッチファイルの文字コードとコマンドプロンプトのコードページが一致していないことです。
| バッチファイルの文字コード |
コードページ |
日本語の扱い |
| Shift-JIS(CP932) |
932(デフォルト) |
正常にコピーされる |
| UTF-8(BOMなし) |
932(デフォルト) |
文字化けが起きる |
| UTF-8(BOMあり) |
65001(chcp 65001) |
条件次第で正常 |
コードページを確認・変更する方法
codepage-check.bat
@echo off
rem 現在のコードページを確認
chcp
rem Shift-JIS (CP932) に切り替え
rem chcp 932 >nul
rem UTF-8 に切り替え
rem chcp 65001 >nul
ポイント:バッチファイルに日本語を直接書く場合は、ファイルをShift-JIS(CP932)で保存するのが最も確実です。VSCode を使っている場合は、右下のエンコーディング表示をクリックして「Shift JIS」を選択して保存してください。
UTF-8テキストを正しくコピーする(PowerShell Set-Clipboard 併用)
UTF-8で保存されたテキストファイルをクリップボードにコピーする場合、clip.exe だけでは文字化けが発生することがあります。このような場合はPowerShellの Set-Clipboard コマンドレットを使うのが確実です。
utf8-copy.bat(PowerShell経由でUTF-8ファイルをコピー)
@echo off
setlocal
set FILE=C:\work\utf8-text.txt
rem PowerShellでUTF-8ファイルを読み込んでクリップボードにセット
powershell -Command "Get-Content -Path '%FILE%' -Encoding UTF8 | Set-Clipboard"
echo UTF-8ファイルをコピーしました。
endlocal
UTF-8文字列を直接コピーする
utf8-string-copy.bat
@echo off
setlocal
rem PowerShellで文字列を直接Set-Clipboardに渡す
powershell -Command "Set-Clipboard -Value 'コピーしたいUTF-8テキスト'"
echo コピーしました。
endlocal
注意:PowerShell の Set-Clipboard は Windows PowerShell 5.1 以降および PowerShell 7.x で利用可能です。Windows 7 等の古い環境では使えない場合があります。Windows 10 / 11 環境では標準で動作します。
clip.exe と Set-Clipboard の使い分け
| 比較項目 |
clip.exe |
Set-Clipboard |
| 日本語(Shift-JIS) |
問題なし |
問題なし |
| 日本語(UTF-8ファイル) |
文字化けの可能性あり |
-Encoding UTF8 で解決 |
| 起動速度 |
高速 |
やや遅い(PS起動分) |
| 構文のシンプルさ |
シンプル |
やや長い |
| 古いWindows対応 |
XP以降すべて |
PS 5.1以降 |
クリップボードの内容を取得・確認する方法
バッチファイルでクリップボードに何が入っているかを確認したり、その内容を変数に格納したりするには PowerShell の Get-Clipboard を使います。
クリップボードの内容を画面に表示する
get-clipboard.bat
@echo off
setlocal
rem クリップボードの内容を表示
echo --- クリップボードの内容 ---
powershell -Command "Get-Clipboard"
echo ---------------------------
endlocal
クリップボードの内容を変数に格納する
PowerShell の出力をバッチファイルの変数に取り込むには for /f を使います。
clipboard-to-var.bat
@echo off
setlocal enabledelayedexpansion
rem クリップボードの内容を変数CBに格納
for /f "delims=" %%i in ('powershell -Command "Get-Clipboard"') do (
set CB=%%i
)
echo クリップボードの内容: !CB!
endlocal
注意:この方法はクリップボードが1行テキストの場合に有効です。複数行の場合は for /f によって最後の行だけが格納されます。複数行を扱う場合はPowerShellスクリプト側で処理することを推奨します。
クリップボードをクリア(空にする)する方法
セキュリティ上の理由や作業後にクリップボードを空にしたい場合もあります。clip.exe で空にする方法と PowerShell を使う方法があります。
clip.exe で空にする方法
clear-clipboard.bat(clip.exeを使う方法)
@echo off
rem 空文字列をクリップボードに送る(事実上クリア)
echo. | clip
rem または NUL デバイスから読み込む(完全に空にする)
clip < nul
echo クリップボードをクリアしました。
clip < nul は NUL デバイス(Windows の空デバイス)から何も読まずに clip に渡すため、クリップボードを完全に空にします。
PowerShell でクリアする方法
clear-clipboard-ps.bat(PowerShellを使う方法)
@echo off
rem PowerShellでクリップボードをクリア
powershell -Command "Set-Clipboard -Value $null"
echo クリップボードをクリアしました。
ポイント:パスワードをクリップボードにコピーして使用した後は、自動的にクリアするバッチを作っておくと安全です。一定時間後に自動クリアする場合は timeout /t 30 /nobreak >nul で30秒待ってからクリアする処理を追加できます。
実践テンプレート:日時付きコンピューター情報をワンクリックでコピー
IT業務でよくある「サポート対応時にPCの基本情報を素早くコピーして貼り付けたい」というシナリオに対応した実践的なバッチファイルです。
pc-info-copy.bat
@echo off
setlocal
rem 現在日時を取得
set DT=%DATE% %TIME%
rem コンピューター名とユーザー名を取得
for /f %%h in ('hostname') do set PC_NAME=%%h
for /f %%u in ('whoami') do set USER=%%u
rem IPv4アドレスを取得
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4"') do (
set IP=%%i
goto :got_ip
)
:got_ip
rem 情報をまとめてクリップボードにコピー
(
echo 【PC基本情報】
echo 取得日時 : %DT%
echo PC名 : %PC_NAME%
echo ユーザー : %USER%
echo IPアドレス: %IP%
) | clip
echo PC基本情報をクリップボードにコピーしました。
echo そのままメモ帳等に貼り付けてください。
pause
endlocal
このバッチを実行すると、以下のような内容がクリップボードにコピーされます。
コピーされる内容の例
【PC基本情報】
取得日時 : 2025/03/11 09:30:45.12
PC名 : DESKTOP-ABC1234
ユーザー : domain\tanaka
IPアドレス: 192.168.1.100
実践テンプレート:複数のIPアドレス情報を整形してコピー
複数のネットワークアダプターがある環境で、すべてのIPv4アドレスを整形してコピーしたい場合のテンプレートです。
network-info-copy.bat
@echo off
setlocal
rem ネットワーク情報を一時ファイルに書き出してからクリップボードにコピー
set TMP_FILE=%TEMP%
etwork_info_tmp.txt
(
echo 【ネットワーク情報】
echo 取得日時: %DATE% %TIME%
echo.
ipconfig | findstr /i "adapter IPv4 IPv6 Default Gateway"
) > %TMP_FILE%
clip < %TMP_FILE%
del %TMP_FILE%
echo ネットワーク情報をコピーしました。
pause
endlocal
一時ファイルを使うメリット
- コマンド出力が多い場合でも確実にすべてクリップボードに格納できる
- 一時ファイル経由で文字コードを制御しやすくなる
%TEMP% はWindowsが自動管理する一時フォルダなので、作業後に削除するのが礼儀
実践テンプレート:フォルダ内ファイル一覧をコピーするツール
指定フォルダ内のファイル一覧を整形してクリップボードにコピーするツールです。プロジェクトのファイル構成をドキュメントに貼り付けるような場面で役立ちます。
file-list-copy.bat
@echo off
setlocal
rem 対象フォルダを指定(引数があればそれを使う)
if "%~1"=="" (
set TARGET=%CD%
) else (
set TARGET=%~1
)
echo 対象フォルダ: %TARGET%
set TMP=%TEMP%\filelist_tmp.txt
(
echo 【ファイル一覧】
echo フォルダ: %TARGET%
echo 取得日時: %DATE% %TIME%
echo.
dir %TARGET% /b /a-d
echo.
for /f %%c in ('dir %TARGET% /b /a-d ^| find /c /v ""') do echo 計: %%c ファイル
) > %TMP%
clip < %TMP%
del %TMP%
echo ファイル一覧をコピーしました。
pause
endlocal
このバッチは引数なしで実行するとカレントディレクトリ、引数にパスを指定するとそのフォルダのファイル一覧をコピーします。
使い方
rem カレントフォルダの一覧をコピー
file-list-copy.bat
rem 特定フォルダの一覧をコピー
file-list-copy.bat C:\work\project
実践テンプレート:パスワードや定型文を安全にコピーするバッチ
よく使うパスワード(テスト用)や定型文を安全にコピーし、一定時間後に自動クリアするバッチファイルです。本番パスワードはバッチに直書きしないよう注意してください。
safe-text-copy.bat
@echo off
setlocal
rem コピーしたい定型文(メニューで選択)
echo コピーする内容を選択してください:
echo 1. テスト用ユーザーID
echo 2. 社内向けメールテンプレート
echo 3. よく使うSQL
echo.
set /p CHOICE=番号を入力:
if %CHOICE%==1 (
echo(testuser@example.com | clip
echo テスト用ユーザーIDをコピーしました。
)
if %CHOICE%==2 (
(
echo お世話になっております。
echo 〇〇部の△△です。
echo.
echo よろしくお願いいたします。
) | clip
echo メールテンプレートをコピーしました。
)
if %CHOICE%==3 (
echo(SELECT * FROM users WHERE id = ? LIMIT 1; | clip
echo SQLをコピーしました。
)
rem 30秒後に自動クリア
echo.
echo 30秒後にクリップボードを自動クリアします...
timeout /t 30 /nobreak >nul
clip < nul
echo クリップボードをクリアしました。
endlocal
注意:本番環境のパスワードをバッチファイルに直接記述するのは危険です。バッチファイルはテキストファイルであるため、誰でも内容を見ることができます。認証情報の管理には専用のパスワードマネージャーを使用し、バッチファイルには平文で記述しないようにしましょう。
PowerShell Set-Clipboard / Get-Clipboard の詳細活用
バッチファイルから PowerShell を呼び出すことで、clip.exe では対応できない高度なクリップボード操作が可能になります。
Set-Clipboard の主なパラメーター
| パラメーター |
説明 |
例 |
-Value |
コピーする値を指定 |
Set-Clipboard -Value "text" |
-Path |
ファイルパスを指定してコピー |
Set-Clipboard -Path file.txt |
-Append |
既存の内容に追記 |
Set-Clipboard -Value "text" -Append |
-PassThru |
コピーした内容を出力に返す |
Set-Clipboard -Value "text" -PassThru |
バッチから PowerShell Set-Clipboard を活用するパターン集
powershell-clipboard-patterns.bat
@echo off
setlocal
rem パターン1: 文字列を直接コピー
powershell -Command "Set-Clipboard -Value 'コピーしたいテキスト'"
rem パターン2: 変数の値をコピー(バッチ変数を展開してPSに渡す)
set MY_TEXT=バッチ変数の値
powershell -Command "Set-Clipboard -Value '%MY_TEXT%'"
rem パターン3: UTF-8ファイルの内容をコピー
powershell -Command "Get-Content 'C:\work\utf8file.txt' -Encoding UTF8 | Set-Clipboard"
rem パターン4: 複数行テキストをコピー(配列として渡す)
powershell -Command "@('1行目', '2行目', '3行目') | Set-Clipboard"
rem パターン5: コマンド出力をコピー(PS側で処理)
powershell -Command "Get-Process | Select-Object Name, CPU | ConvertTo-Csv | Set-Clipboard"
endlocal
Get-Clipboard の活用例
get-clipboard-patterns.bat
@echo off
setlocal
rem クリップボードの内容を表示
powershell -Command "Get-Clipboard"
rem クリップボードの内容をファイルに保存
powershell -Command "Get-Clipboard | Out-File 'C:\work\clipboard-backup.txt' -Encoding UTF8"
rem クリップボードの内容の行数を数える
powershell -Command "(Get-Clipboard).Count"
rem クリップボードの内容をトリム(前後の空白を除去)して再セット
powershell -Command "Set-Clipboard -Value (Get-Clipboard).Trim()"
endlocal
トラブルシューティング
clip.exe やクリップボード操作でよく発生するトラブルとその解決策をまとめました。
| 症状 |
原因 |
解決策 |
| 日本語が文字化けする |
ファイルの文字コードとコードページが不一致 |
ファイルをShift-JIS保存 または chcp 65001 でUTF-8に切替 |
| 貼り付けると末尾に空行が入る |
echo が末尾に CRLF を付加する |
PowerShell の Set-Clipboard -Value $var を使う |
| echo の末尾にスペースが入る |
echo テキスト の構文 |
echo(テキスト の構文に変更 |
| clip.exe が見つからないエラー |
PATH が通っていない環境 |
フルパス %windir%\system32\clip.exe で指定 |
| 複数行コピーで最後の行しかコピーされない |
echo を個別にパイプしている |
グループコマンド ( ... ) | clip を使う |
| Set-Clipboard が使えない |
古いPowerShellバージョン(4.0以下) |
PowerShell 5.1以上に更新、またはclip.exeで代替 |
| ファイルをコピーしようとするとエラー |
clip ファイル名 という誤った構文 |
clip < ファイル名 のリダイレクト構文を使う |
| コピーした内容が貼り付けできない |
他アプリがクリップボードを占有している |
他アプリを閉じてから実行、またはPowerShell版を使う |
| 変数展開されない(%VAR% がそのまま) |
setlocal enabledelayedexpansion なしで ! 変数を使用 |
遅延展開が必要な場合は !VAR! と setlocal enabledelayedexpansion を追加 |
文字化けが発生した場合の診断手順
文字化け診断手順
手順1: 現在のコードページを確認
chcp
→ 932 なら Shift-JIS 環境(日本語標準)
→ 65001 なら UTF-8 環境
手順2: バッチファイルの文字コードを確認
→ VSCode 右下のエンコーディング表示で確認
→ Shift-JIS (CP932) が基本推奨
手順3: コードページとファイル文字コードを合わせる
→ ファイルを Shift-JIS で保存する(推奨)
→ または UTF-8 ファイルは PowerShell Set-Clipboard で処理
改行コードの問題
バッチファイルを macOS / Linux 環境で作成したり、git のライン設定によって LF のみの改行になっている場合、Windows の clip.exe に渡したときに改行が正しく認識されないことがあります。
ポイント:Windows のコマンドプロンプトは CRLF(\r
)を改行として認識します。バッチファイルは必ず CRLF 形式で保存してください。git を使っている場合は .gitattributes で *.bat text eol=crlf を指定しておくと安全です。
まとめ
バッチファイルでクリップボードを操作する方法を、基本から応用まで幅広く解説しました。最後に要点を整理します。
この記事のまとめ
- clip.exe は Windows 標準搭載のコマンドで、パイプ・リダイレクトで渡したテキストをクリップボードに格納する
- 固定文字列は
echo テキスト | clip、変数は echo %VAR% | clip、ファイルは clip < file.txt
- 複数行コピーはグループコマンド
( echo ... ) | clip を使う
- 文字化けの主な原因はバッチファイルの文字コードとコードページの不一致。Shift-JIS(CP932)保存が基本
- UTF-8テキストや高度な操作は PowerShell Set-Clipboard / Get-Clipboard を使う
- クリップボードのクリアは
clip < nul または Set-Clipboard -Value $null
- 実践では「PC情報ワンクリックコピー」「ファイル一覧コピー」「定型文メニュー」等のテンプレートが役立つ
clip.exe はシンプルながら、バッチファイルの自動化に組み合わせることで非常に強力なツールになります。今回紹介したテンプレートをベースに、自分の業務に合わせてカスタマイズしてみてください。コピー操作をバッチで自動化するだけで、日々の繰り返し作業がぐっと楽になるはずです。