• ベストアンサー

バッチファイル FOR文 

こんにちは、 リモートクライアント40台に対して、フォルダを作成するバッチファイルを書きたいと考えています。 (リモートコンピュータ名:PC01からPC40) FOR /L %%i IN (1,1,40) DO mkdir "\\pc%%i\c$\test" とすると、 01,02,03・・とは変数が入らず、1,2,3と入っていくためエラーが起きます。 上記の事で、うまいバッチファイルの書き方はありますでしょうか?何かお分かりの方がいましたら教えてください。よろしくお願いします。 ほか、上のバッチファイルではエラー無視しないように思うのですが、エラーを無視しながら進めていくにはどうすればいいのかもあわせて教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9381
noname#9381
回答No.1

単純に2行に分けては?(逃げですが) FOR /L %%i IN (1,1,9) DO mkdir "\\pc0%%i\c$\test" FOR /L %%i IN (10,1,40) DO mkdir "\\pc%%i\c$\test"

putitpmatp
質問者

お礼

返信ありがとうございます。非常に参考になりました。

その他の回答 (2)

noname#9381
noname#9381
回答No.3

#2さんの回答で、「エラー無視」の意味がわかりました。  そういう意味でエラー無視をするなら、1台1台に対してそれぞれバッチファイルを計40個作って、それをメインのバッチのなかからstartコマンドで呼び出すことになると思います。バッチの中からそのファイルを作るようにすれば手間は省けますが、現実的には接続エラーが出る状態でも、タイムアウトによって次のノードに処理が移っていきますので運用上の問題はないと思います。  単にエラー表示をさせたくなければメッセージをNULに叩き込むこともできると思いますが、それだとまったく実行結果が分からなくなるので、表示させたほうがいいでしょうね。

putitpmatp
質問者

お礼

返信ありがとうございます。解決することができました。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

#1の方の回答が実用的だと思いますが、分けないとすると、 FOR /L %%i IN (1,1,40) DO if %%i lss 10 (mkdir "\\pc0%%i\c$\test") else (mkdir "\\pc%%i\c$\test") >上のバッチファイルではエラー無視しないように思うのですが、 「エラー無視しない」とは具体的にどういう意味でしょうか?文字通りだとエラーが発生するとfor文が中断してそれ以降のPCについて処理されないということでしょうか?そんなはずは無いと思いますが。 もしかして、存在しないor電源の入っていないPCについてタイムアウトするまで時間がかかるということでしょうか?それはしょうがないと思います。

putitpmatp
質問者

お礼

返信ありがとうございます。解決することができました。

関連するQ&A

  • バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。

    バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP) for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。 1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない) 2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt 3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt としてもうまくいきません。 %%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。 どう書けばメガバイト単位で一覧を出せるでしょうか? あれ? 4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。  どなたか、どこが間違っているのか教えていただけないでしょうか

  • バッチファイル For 文 スペース

    いつも大変御世話になっております。 WindowsXP環境下の 【D:\test】フォルダ直下に TEST.conf というファイルがあり 中身は1行こんな文があります。↓ test001=12345 6 そして 【D:\test\bat】フォルダ直下に TEST.bat というファイルがあり 中身のードはこんなコードです。↓ For /F "tokens=1*" %%i in (..\TEST.conf) do set %%i SET IN_FILE=%test001% 実行結果は SET IN_FILE=12345 になりました。 なぜ SET IN_FILE=12345 6 ではないのですか? スペースを _ (アンスコ)など何か入れてあげると SET IN_FILE=12345_6 上記バッチファイルのFor文では、スペース手前までしか見てくれないのでしょうか? 他に方法は無いのでしょうか? もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。

  • バッチファイルの使い方について

    このサイトで、両面スキャンした画像ファイルを表面と裏面を別々のフォルダに振り分ける方法を質問して、バッチファイルを使う方法を教えてもらったのですが、上手くいきません。バッチファイルを使うのは初めてなので、どこかまずいところがあるのかと思います。 教えていただいた下記のものそのままでバッチファイルを作り、画像ファイル(jpg)を格納したフォルダに置いてダブルクリックすると、「1」「2」のフォルダができるだけで、画像ファイルは移動せず、2つのフォルダは空のままです。 どこを直せばよいのか教えてください。よろしくお願いします。 set N=1 mkdir 1 mkdir 2 for %%I in (*.jpg) do call :sub %%I goto :EOF :sub move %%I %N% set /a N=3-N goto :EOF

  • バッチファイルのFOR文について【tokens~】

    お世話になっております バッチファイルの、文字列操作で ---------------------------------------------------------- FOR /F "eol=; tokens=2,32 delims=, " %i in (myfile.csv) do @echo %i %j %k ---------------------------------------------------------- のtokensで指定している32列目(カンマが32個目)以降の値を 取得しません。 なぜでしょうか。 下記のHPを参照すると、一度変数をクリアしそのしたでさらにForで 指定すればよいとのことなのですが、欲しい値が多すぎて とても、Forのしたに何度書きたくありません。 http://folomy.jp/heart/?m=pc&a=page_c_topic_detail&target_c_commu_topic_id=12560 どのようにしたら、目的を果たせるのでしょうか。 ご教授ください。

  • MS-DOS: for文で「01」が「1」になってしまいます

    よろしくお願いします。 Windows 2000 Server についての質問です。 for文を使いバッチを組んでいます。 形式は下記です。 FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] 1.例えば、次のようにバッチファイル(test.bat)に記述します。  for /L %%F IN (%1,1,%2) DO echo %%F 2.そして、次のようにコマンドプロンプトで実行します。  test.bat 01 06 3.エコーとして返るのは、1,2,3,4,5,6 という1桁の数値であり、   01,02,03,04,05,06 という2桁の数値ではありません。   後者のように2桁で返したいのですが、どのようにすれば良いでしょうか。

  • For文のtokensにおけるバッチファイル作成について

    はじめまして。 バッチファイルにて以下のコマンドを作成して 実行したのですがきちんと実行されません。 コマンドプロンプトを起動して1個1個実行するときちんと 実行されます。どういうことなのでしょうか? <バッチファイル> @echo off cd /d デスクトップ for /F "tokens=2" %i in ( file.txt ) do echo %i >> result.txt pause <file.txtの中身> 1<tab>2<tab>3 4<tab>5<tab>6

  • バッチのFOR及びIF文

    バッチであるTEXTファイルから一部を置換して別のファイルを作成する処理を考えてます。 「あるTEXTファイル」にはSQL文があります。 SELECT CODE ||'","'|| NAME FROM TEST01 WHERE (UPDATEDATE || UPDATETIME) > TO_CHAR(_HENKAN_) の内容が入ってます。 このファイルから「_HENKAN_」をバッチファイル内で置換し、実行できるSQLファイルを作成する処理です。 しかし、FOR文の中のIF文で全然動かないです。 FOR /F "tokens=1 delims=" %%A IN (C:\sql.txt) DO ( if /i %%A=="TO_CHAR(_HENKAN_)" ( echo TO_CHAR(%HENKAN%) >> %出力ファイル% 2>&1←%HENKAN%は時間を設定済み*ここが問題 echo %%A ←テストのため ) else ( echo %%A >> %出力ファイル% 2>&1 ) ) 実行時はエラーはなく実行されますが、echo TO_CHAR(%HENKAN%)が全然効かないようです。 いや、そもそも if /i %%A=="TO_CHAR(_HENKAN_)"が効かないですね。echo %%Aで全SQL文が表示されます。 いろいろ調べたのですが、理由がわかりませんでした。 バッチに詳しい方は教えてください。 よろしくお願いします。

  • バッチコマンドの for文の使い方。

    以下のバッチファイルはテキストを一行ずつ3つの変数に読み込み <subtest.bat>の処理を行うものです。 この2つのバッチファイルを一つにまとめたいのですがどうすればいいでしょうか。ただし、<subtest.bat>内は実際には10行程度の文です。 goto文を使用してみよとしたのですがうまくいきませんでした。 どなたかわかる方がいらっしゃいましたら、教えていただけないでしょうか、お願いいたします。 ------------------------------------------------ rem <test.bat> @echo off for /F "usebackq tokens=1-3" %%a in ( file.txt ) do call subtest.bat %%c,%%b,%%a PAUSE exit -------------------------------------------------- rem <subtest.bat> rem 変数の表示 rem 実際には10行程度の文です。 @echo %3, %2, %1 -------------------------------------------------- <file.txt>の内容(タブ区切り) shin0.bmp1000 200 shin1.bmp 700 200 shin2.bmp 800 200 shin3.bmp 860 200 shin4.bmp 400 200 --------------------------------------------------

  • 【バッチファイル】for繰り返しがうまくいかない

    バッチファイルの置いてあるフォルダ内(ついでにサブフォルダ内も)の 特定の拡張子(今回は.txt)ファイル全てを対象に (1)ある行ある列n文字目から2文字を読み込む×2 (2)読み込んだ文字をそのファイル名の先頭に追加 というバッチファイルを作りたいです。 具体例 テキストの中身↓ a.txt ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○xx ○○yy ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... →ファイル名を「xxyya.txt」にしたい そこで素人ながら下記のようなバッチファイルを作成してみましたが、 フォルダ内にある1つ目のファイルに対してはうまく動くのですが 2つ目以降はリネーム出来ません。 フォルダ内すべての.txtファイルに実行するための 対処法がお分かりになれば、ご教授いただけると幸いです。 「rename.bat」 cd /d %~dp0 rem .txtファイルを列挙 for /f "usebackq tokens=*" %%i in (`dir /s /b *.txt`) do ( set name=%%~xni rem 特定の行列の文字列を抜き出して変数へ格納 for /f "skip=5 tokens=2,3" %%a in (%%i) do ( set front=%%a set back=%%b rem 7行目以降は不要なのでforから離脱 goto break ) :break rem 抜き出した文字列からさらに必要な文字を抜き出して変数へ set hed="%front:~2,2%%back:~2,2%" rem 元のファイル名へ追記 ren %name% %hed%%name% )