0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テスト業務効率化に向けて2

Last updated at Posted at 2025-10-19

はじめに

テスト環境のLinuxサーバーにある特定のフォルダをWindowsへ転送する作業を自動化する方法をまとめます。

実行環境

  • Windows11
  • Linux(Debian)

全体の流れ

初回のみ
├─ register_wifi.bat でWi-Fi登録

通常使用
└─ download.bat でフォルダ転送

実装

1. 初回のみ

register_wifi.bat
@echo off
chcp 65001 > nul
setlocal

set SSID_PREFIX=WiFi-
set WIFI_PASSWORD=YourWiFiPassword123

set /p SSID_SUFFIX="Wi-Fi末尾: "
if "%SSID_SUFFIX%"=="" echo 入力なし && pause && exit /b 1
set FULL_SSID=%SSID_PREFIX%%SSID_SUFFIX%

netsh wlan show profiles | find "%FULL_SSID%" > nul 2>&1
if not errorlevel 1 echo 既に登録済み && pause && exit /b 0

echo 登録中

set XML=%TEMP%\wifi_%RANDOM%.xml
powershell -Command "$ssid='%FULL_SSID%';$pass='%WIFI_PASSWORD%';\"$ssid$ssidESSautoWPA2PSKAESfalsepassPhrasefalse$pass\" | Out-File '%XML%' -Encoding UTF8"

netsh wlan add profile filename="%XML%" > nul 2>&1
del "%XML%" 2> nul

if errorlevel 1 (echo 失敗) else (echo 完了: %FULL_SSID%)
pause

使い方

  1. 設定値を編集
  2. バッチファイルを実行
  3. SSID末尾を入力(例 - 1234)

2. フォルダ転送(通常使用)

download.bat
@echo off
chcp 65001 > nul
setlocal

set LINUX_IP=IPアドレス
set LINUX_USER=root
set LINUX_PASSWORD=Password123
set REMOTE_FOLDER=/root/data
set LOCAL_FOLDER=C:\LinuxData
set SSID_PREFIX=WiFi-

if exist "C:\Program Files (x86)\WinSCP\WinSCP.com" set W=C:\Program Files (x86)\WinSCP\WinSCP.com
if exist "C:\Program Files\WinSCP\WinSCP.com" set W=C:\Program Files\WinSCP\WinSCP.com
if "%W%"=="" echo WinSCP未検出 && pause && exit /b 1

set /p S="Wi-Fi末尾: "
if "%S%"=="" echo 入力なし && pause && exit /b 1
set FULL_SSID=%SSID_PREFIX%%S%

netsh wlan show profiles | find "%FULL_SSID%" > nul 2>&1
if errorlevel 1 (
    echo 未登録: %FULL_SSID%
    echo register_wifi.bat を先に実行してください
    pause
    exit /b 1
)

echo [1/3] 接続中
netsh wlan connect name="%FULL_SSID%" > nul 2>&1
if errorlevel 1 echo 接続失敗 && pause && exit /b 1
timeout /t 15 /nobreak > nul

echo [2/3] 確認中
ping -n 1 %LINUX_IP% -w 1000 > nul 2>&1
if errorlevel 1 echo サーバー接続失敗 && pause && exit /b 1

echo [3/3] フォルダ転送中

set T=%TEMP%\winscp_%RANDOM%.txt
(
echo option batch abort
echo option confirm off
echo open 

sftp://%LINUX_USER%:%LINUX_PASSWORD%@%LINUX_IP%/
echo lcd "%LOCAL_FOLDER%"
echo get -delete "%REMOTE_FOLDER%/*"
echo exit
) > "%T%"

"%W%" /script="%T%" > nul 2>&1
set R=%errorlevel%
del "%T%" 2> nul

if %R% equ 0 (echo 完了 && explorer "%LOCAL_FOLDER%") else echo 失敗
pause

使い方(初回実行時)

  1. 設定値を編集
  2. register_wifi.bat を実行してWi-Fiプロファイルを登録
  3. download.bat を実行
  4. SSID末尾を入力(例 - 1234)
  5. 自動でフォルダ転送完了

使い方(2回目以降)

  1. download.bat を実行
  2. SSID末尾を入力(例 - 1234)
  3. 自動でフォルダ転送完了

3. XML生成の改善

問題点

  • エスケープだらけで読みにくい

改善版

  • PowerShell活用
powershell -Command "$ssid='%FULL_SSID%';\"...\""
  • XMLテンプレート使用時
作業フォルダ/
├── template.xml               ← 1回だけ作成
├── register_wifi_template.bat ← Wi-Fi登録
└── download.bat               ← フォルダ転送
xmlファイル
template.xml
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>SSID_PLACEHOLDER</name>
    <SSIDConfig>
        <SSID>
            <name>SSID_PLACEHOLDER</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>PASSWORD_PLACEHOLDER</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>
register_wifi_template.bat
REM テンプレートファイルの存在確認
if not exist "%~dp0wifi_template.xml" (
    echo エラー wifi_template.xml が見つかりません
    pause
    exit /b 1
)

REM 一時XMLファイル作成
set TEMP_XML=%TEMP%\wifi_%RANDOM%.xml

REM テンプレートを読み込んでプレースホルダーを置換
powershell -Command "(Get-Content '%~dp0wifi_template.xml') -replace 'SSID_PLACEHOLDER', '%FULL_SSID%' -replace 'PASSWORD_PLACEHOLDER', '%WIFI_PASSWORD%' | Set-Content '%TEMP_XML%' -Encoding UTF8"

4. WinSCP自動化

WinSCPスクリプトの基本構造
set T=%TEMP%\winscp_%RANDOM%.txt
(
echo option batch abort
echo option confirm off
echo open sftp://user:pass@host/
echo lcd "C:\local"
echo get "/remote/*"
echo exit
) > "%T%"

WinSCP.com /script="%T%"

ポイント

  • option batch abort - エラー時に中断
  • option confirm off - 確認ダイアログ無効
  • get -delete - 転送後リモートから削除(削除したくない場合は -delete を削除)

setlocal の役割

setlocal
set XML=%TEMP%\wifi.xml
...
pause
REM ← ここで自動的に環境変数がクリア

効果

  • バッチファイル内の変数変更がローカルスコープに制限
  • 終了時に自動的に元に戻る
  • グローバル環境変数を汚染しない

転送オプション

リモートファイルを残す場合

echo get "%REMOTE_FOLDER%/*"

リモートファイルを削除する場合

echo get -delete "%REMOTE_FOLDER%/*"

フォルダ構造ごと転送

echo get -delete "%REMOTE_FOLDER%"

-delete オプションを使用すると、転送後にリモートのファイルが削除されます。必要なファイルが消えないよう注意してください。

セキュリティ問題

パスワード平文保存

set WIFI_PASSWORD=YourWiFiPassword123
set LINUX_PASSWORD=Password123

リスク

  • バッチファイルが見られるとパスワードが露出

対策

  • ファイルのアクセス権限を制限
  • 信頼できる場所に保管
  • 定期的なパスワード変更
  • 可能であればSSH鍵認証を検討

今後の改善案

  • SSH鍵認証の導入
  • タスクスケジューラでの定期実行
  • PowerShellへの完全移行

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?