人気マンガがだれでも無料♪電子コミック読み放題!!

WindowsServer2012で、タスクスケジューラで、夜間にNASへファイルをコピーするバッチを動かしています。バッチの中でログを書き出すようにしているので、実行されているのは間違いありませんが、以下に示すように「パスが見つからない」ということになってしまいます。

このバッチファイルをそのまま、手動で起動すると、全く問題なくコピーされますが、タスクスケジューラーから起動した場合はうまくいきません。

バッチの内容
------------

rem net use X: \\192.168.xx.xx\dbback /USER:xxxxxx xxxxxx


rem /**********************************/
rem ログファイルを格納するフォルダ
D:
cd \LOG
rem /**********************************/
rem
echo /**** copy Start *******************************/
date /T
time /T
echo on


copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx.bak" X:\xxxx.bak /Y
copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx1.bak" X:\xxxx1.bak /Y
copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx11.bak" X:\xxxx11.bak /Y
echo /**** copy END *******************************/
time /T
echo .
-------------

タスクスケジューラから実行した場合のログ
------------
(略)

D:\log>copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx.bak" X:\xxxx.bak /Y
指定されたパスが見つかりません。
0 個のファイルをコピーしました。

D:\log>copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx1.bak" X:\xxxx1.bak /Y
指定されたパスが見つかりません。
0 個のファイルをコピーしました。

D:\log>copy "D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\xxxx11.bak" X:\xxxx11.bak /Y
指定されたパスが見つかりません。
0 個のファイルをコピーしました。

(略)
------------------

手動でこのバッチを起動した場合は、「1個のファイルをコピーしました」が記録されます。

Xドライブはあらかじめネットワークドライブとして指定してありますし、ログオンしたままの状態です。

タスクで実行した場合に、ログも記録されない=実行されないのであれば、何か設定が悪いというのはわかりますが、手動で問題なく稼働するバッチをタスクから実行した場合にこのような結果になるのが謎です。

よろしくお願い致します。

質問者からの補足コメント

  • 試してみましたが、原因がなんとなくわかりました。

    net useで状況確認すると、セッション?が切れてないということになり、その状態だとNGで全部クリアしてからだとOKということでした。

    タスクで実行した場合に、セッションが切れないというのが問題のようです。

    バッチの最後にネットワークドライブを切るとかいれて試してみようと思います。

    ありがとうございました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/07 09:00

A 回答 (1件)

rem になっていますが、バッチファイルの中で、net use でネットワークドライブを割り当ててください。


そのあとで、パラメーター無しでnet useコマンドを実行して、ちゃんと接続されているかをログに残しておいた方が良いでしょう。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。

ご指摘の箇所は、以前は実行させていたのですが、逆に違うエラーが出ていたので、
remしておりました。

しかし、試してみます。

お礼日時:2015/04/06 08:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWin2K8 R2のタスクでバッチが動作しない

Windows2008 R2のタスクスケジューラでバッチファイルが実行できない状態に陥っています。

環境・状況等は以下のとおりです。

・バッチファイルを単体で実行させたときには、問題なく実行できる。
・ネットワーク上のサーバのあるフォルダをrobocopyするジョブ。
・タスクスケジューラから実行できている他のバッチファイルを流用して作成。(このジョブも別のサーバのバックアップをしている)
・実行結果は、0x1。
・タスクスケジューラ登録時には、administratorで登録し、パスワードも入れている。



問題のバッチファイルを直接叩いたときには、何のエラーもなく、約3時間要するrobocopyでのバックアップが稼動しますが、
タスクスケジューラに登録して実行しようとすると、タスクスケジューラの履歴をみると、スタートはしているがすぐに終了して
おり、バッチファイル内に記述したrobocopyが稼動していないようです。




バッチファイルの内容は

-----------------------
@echo off

set LOGFILE=c:\bat\fd_backup\backup.log
date /t>%LOGFILE%
echo 開始時刻>>%LOGFILE%
time /t>>%LOGFILE%
echo. >>%LOGFILE%
echo Run backup.bat>>%LOGFILE%
echo. >>%LOGFILE%

ROBOCOPY \\server1\backup\ D:\BACKUP\server1-back\ /MIR /NP /FP /TS /COPYALL /TEE /R:0 /LOG+:%LOGFILE%

echo. >>%LOGFILE%
echo 終了時刻>>%LOGFILE%
time /t>>%LOGFILE%
-------------------------

もうひとつ登録してあるバッチファイルは、robocopyの全く同じコマンドで、対象としているサーバと保存先やログファイル名が
異なるだけで問題なくタスクとして稼動しています。




ネット上でいろいろと調べてチェックしてみましたが、おかしいところが見当たらず、困っています。


アドバイスよろしくお願い致します。

Windows2008 R2のタスクスケジューラでバッチファイルが実行できない状態に陥っています。

環境・状況等は以下のとおりです。

・バッチファイルを単体で実行させたときには、問題なく実行できる。
・ネットワーク上のサーバのあるフォルダをrobocopyするジョブ。
・タスクスケジューラから実行できている他のバッチファイルを流用して作成。(このジョブも別のサーバのバックアップをしている)
・実行結果は、0x1。
・タスクスケジューラ登録時には、administratorで登録し、パスワードも入れている。



問題の...続きを読む

Aベストアンサー

>問題のバッチファイルを直接叩いたときには、何のエラーもなく、約3時間要するrobocopyでのバックアップが稼動しますが、

タスクスケジューラではエラーとなって、バッチファイルの直接実行ではエラーとなると思ってよろしいでしょうか?

そうであるならば、タスクで「全般」タブの「最上位の特権で実行する」にチェックが入っているか確認してみて下さい。

Qネットワークドライブを見るバッチをタスクで実行不可

「ネットワークドライブ経由で他サーバ(仮にサーバB)のファイルを削除する」バッチを作成しました。

このバッチをサーバAへ置き、手動で実行すると上手く動くのですが、
タスクスケジューラに設定して実行すると失敗してしまいます。

確認用に下記ロジックを試してみると、
 dir "Z:\files" (Zがネットワークドライブ)
手動ではファイル一覧が表示され、タスクからだと何も表示されず終わります。

サーバAへはAdministratorでログインしており、タスクを実行するアカウントも
Administratorを使用し、もちろんAdministrators権限も持っています。

実行環境はwindows server 2003 です。(サーバAB両方共)

一つ気になる点としては、サーバAへはリモートデスクトップでログインしています。
このあたりの複合的な要素で権限が変わっているのかもしれませんが確認方法が判らず
困っております。

タスクからでも同様に動かせる方法や、バッチ上から実行中アカウントを知る方法など
ご存知の方がいらっしゃいましたらご回答をお願い致します。

「ネットワークドライブ経由で他サーバ(仮にサーバB)のファイルを削除する」バッチを作成しました。

このバッチをサーバAへ置き、手動で実行すると上手く動くのですが、
タスクスケジューラに設定して実行すると失敗してしまいます。

確認用に下記ロジックを試してみると、
 dir "Z:\files" (Zがネットワークドライブ)
手動ではファイル一覧が表示され、タスクからだと何も表示されず終わります。

サーバAへはAdministratorでログインしており、タスクを実行するアカウントも
Administratorを使用し、もちろ...続きを読む

Aベストアンサー

手動では動くけどタスクスケジューラでは動かないという場合は、作業ディレクトリを指定してないという場合が多いようですが、指定していますか。

「タスクスケジューラ バッチファイル」で検索するといろいろなケースが見つかります。

下記など参考になるかと思います。

http://tobysoft.net/wiki/index.php?Windows%2FVista%2F%A5%BF%A5%B9%A5%AF%A5%B9%A5%B1%A5%B8%A5%E5%A1%BC%A5%E9%A1%BC%A4%C7%A5%D0%A5%C3%A5%C1%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%BC%C2%B9%D4%A4%B9%A4%EB%CA%FD%CB%A1

http://mroom.cool.ne.jp/nikki/archives/000059.html

http://webcache.googleusercontent.com/search?q=cache:6Ryof9huGB8J:blogs.wankuma.com/rapt/archive/2010/04/22/188276.aspx+%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9+%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&cd=3&hl=ja&ct=clnk&gl=jp&source=www.google.co.jp

手動では動くけどタスクスケジューラでは動かないという場合は、作業ディレクトリを指定してないという場合が多いようですが、指定していますか。

「タスクスケジューラ バッチファイル」で検索するといろいろなケースが見つかります。

下記など参考になるかと思います。

http://tobysoft.net/wiki/index.php?Windows%2FVista%2F%A5%BF%A5%B9%A5%AF%A5%B9%A5%B1%A5%B8%A5%E5%A1%BC%A5%E9%A1%BC%A4%C7%A5%D0%A5%C3%A5%C1%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%BC%C2%B9%D4%A4%B9%A4%EB%CA%FD%CB%A1

http://mroom.cool...続きを読む

Qバッチファイルのタスクスケジューラでの実行について教えて下さい。

AAAのパソコンのDドライブの111というフォルダを、ネットワーク経由でBBBのパソコンのDドライブの222という共有フォルダ内に333というフォルダ内へxcopyでコピーするバッチ(backup.bat)を作ってタスクスケジューラで1日1回自動実行させようと思うのですが、うまくいきません。どうすればよいのでしょうか?

AAAパソコン:Windows2000 professional SP4
       000フォルダ内にbackup.bat(共有フォルダではないです)
       111フォルダは共有フォルダではないです
       ユーザーアカウント⇒Administrator
       パスワードはないです
      
BBBパソコン:WindowsXP professional SP2
       222フォルダは共有フォルダ
       333フォルダは222の共有フォルダの中
       ユーザーアカウント⇒バックアップ
       パスワード⇒123

バッチファイル(backup.bat)
 ↓
 net use \\BBB\222 123 /user:バックアップ
 xcopy d:\111 \\BBB\222\333\ /E/C/F/H/R/K> d:\バックアップログ.log
 net use \\BBB\222 /delete

上記バッチファイルをAAAパソコンの「タスクの実行するファイル名」に直接登録(d:\000\backup.bat)して実行させてみたのですが、タスクの詳細設定のログ表示でログを見ると、『タスクは次の終了コードで完了しました:(1).』となっていて実行されませんでした。
cmd.exe /c d:\000\backup.batでタスク登録してもだめでした。

バッチファイル(backup.bat)をダブルクリックして実行するとBBBパソコンにコピーできます。

タスク設定時の
  実行するアカウント名⇒AAA\Administrator
  パスワードはなし

よろしくお願いいたします。

AAAのパソコンのDドライブの111というフォルダを、ネットワーク経由でBBBのパソコンのDドライブの222という共有フォルダ内に333というフォルダ内へxcopyでコピーするバッチ(backup.bat)を作ってタスクスケジューラで1日1回自動実行させようと思うのですが、うまくいきません。どうすればよいのでしょうか?

AAAパソコン:Windows2000 professional SP4
       000フォルダ内にbackup.bat(共有フォルダではないです)
       111フォルダは共有フォルダではないです
       ユーザー...続きを読む

Aベストアンサー

パソコンAAAのアカウントAdministraorにパスワードを設定し、
タスク実行時にもそのパスワードを設定してみて下さい。

それで実行できれば、参考URLにあるとおり原因はセキュリティ上の仕様なのでしょう。
WindowsXP以降で発生する、と書かれているので原因が違っているかもしれませんが・・・

参考URL:http://support.microsoft.com/kb/299854/ja

Qパスがあってない?指定されたパスが見つかりません

【OS】Win7 32bit

bat((1)とする)で、
devcon.exe update "C:\Program Files\Microsoft Xbox 360 Accessories\Xusb21.inf" "USB\VID_045E&PID_028E"
del C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360cps.dll
pause

というコマンドを実行するときに、
一行目のdevcon.exeのupdateはDrivers updated successfullyと出るので、実行されていると思います。
しかし、二行目のdelのコマンドは、
「C:\windows\system32>del C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360cps.dll
指定されたパスが見つかりません」と出ます。
パスが見つからないのだから、環境変数のpathに

C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja

を追加すればうまくいくだろうと追加したのですが、やはり同じ結果に。


違うbat((2)とする)もありまして、

devcon.exe update "C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360c.inf" "USB\VID_045E&PID_028E"
pause

というbatなのですが、こちらはdevconのupdateだけですがupdated succsessfullyと出るので、

C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja

は通ってることになると思うんです。

x360cps.dllという文字列を「プログラムとファイルの検索」から検索して、場所を確認するとC:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja
となっているし、このフォルダ内のx360cps.dllをcmd画面にドラッグ&ドロップすると、
C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360cps.dll
と出ます。

削除自体はデスクトップからできるのですが、
なぜこの場合「指定されたパスが見つかりません」と出るのか納得がいきません。
フォルダ1,2のフォルダ名がいけないのでしょうか?
でも(2)が実行されてるしなあ。updateとdelではフォルダ名によってできるできないがわかれるのでしょうか?
フォルダ1の名前は全角カタカナ、フォルダ2の名前は漢字、半角スペース、全角カタカナの混在です。

この場合なぜ「指定されたパスが見つかりません」と出るのかどなたか教えていただけませんか?
足りない情報としてどんなものがあるかわからないので、足りない情報があればおっしゃってください。
ちなみに、batやpathについてはネットで読みかじった程度の知識しか持っておりません。
こんな者への回答ですが、宜しくお願いします。

【OS】Win7 32bit

bat((1)とする)で、
devcon.exe update "C:\Program Files\Microsoft Xbox 360 Accessories\Xusb21.inf" "USB\VID_045E&PID_028E"
del C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360cps.dll
pause

というコマンドを実行するときに、
一行目のdevcon.exeのupdateはDrivers updated successfullyと出るので、実行されていると思います。
しかし、二行目のdelのコマンドは、
「C:\windows\system32>del C:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c....続きを読む

Aベストアンサー

delコマンドは複数のファイルを同時に削除するために複数のファイル名を引数にすることができるのではなかったかと思います.

このため,フォルダ2の名前に半角スペースが入っているとのことですので,delコマンドの引数がここで2つに分離されてしまっているのではないでしょうか.

delの引数のC:\Users\Yxxxxxxxxx\Desktop\フォルダ1\フォルダ2\x360c.win7.x86.ja\x360cps.dllをダブルクォーテーション(”)で括ってみては如何でしょう.

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qバッチファイルでサーバーのファイルをクライアントへコピーしたい

サーバーに保存されているファイルを、
クライアントのCドライブへコピーしたい。

各クライアントにバッチファイルを配布して、
それを実行するだけでコピーされるようにしたいのです。

初心者で申し訳ないのですが、何卒よろしくお願いします。
------------------------

下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。
しかし、コピー先はバッチファイルを実行したクライアントのローカルディレクトリにしたいのです。

copy \\サーバー名\フォルダ名\ファイル名 C:\

Aベストアンサー

>下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。

そんなはずはありません。何かの勘違いでしょう。

>copy \\サーバー名\フォルダ名\ファイル名 C:\

だと、バッチファイルを実行したPCのC:\にコピーされます。

copy \\サーバー名\フォルダ名\ファイル名 C:
と、最後の \ を削れば、バッチファイルがあるのと同じディレクトリにコピーされます。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング