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?

ネットワークドライブへのタスクスケジューラからのバッチ処理

Posted at

背景

NASの所定ディレクトリにエンコード対象のファイルを置き、エンコードサーバがそのフォルダを監視し、ファイルが存在したらエンコードを実施するというタスクをタスクスケジューラで実現しようとしたらハマったはなし。

システム概要

image.png

ハマったポイント

  • call setではフォルダ内のファイル名が正しく取得できない。👇対応策として、遅延環境変数を使った。
    setlocal enabledelayedexpansion
    :: 入力ディレクトリ
    set INPUT_DIR=Z:\input
    :: 出力ディレクトリ
    set OUTPUT_DIR=Z:\output
      :
    for %%F in ("%INPUT_DIR%\*") do (
        :: ファイル名と拡張子を分解
        set "INPUT_FILE=%%F"
        set "BASENAME=%%~nF"
        set "OUTPUT_FILE=%OUTPUT_DIR%\!BASENAME!.mp4"
            :
    )
    

  • ネットワークドライブを利用するとき、ローカルで実行するとすでに所定のドライブレターにアサイン済なので問題なく実行できるが、タスクスケジューラ越しだと、そのタイミングでのアサインが必要になる。👇が対応策。
    :: ネットワークドライブを解除(エラー無視)
    net use Z: /delete >nul 2>&1
    
    :: ネットワークドライブを再マウント
    net use Z: \\network\target_dir /user:username password
    

  • これは単なる間抜けなハマりポイント。
    バッチファイルの最後に"pause"を利用すると、タスクスケジューラ経由で実行されたcmd.exeがずっと実行されたまんまになるにも関わらずパフォーマンスモニタのプロセスに存在しない(わからなかっただけ?)になるので、意外となんで処理が終わらないのか理解できずハマってしまった。
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?