- PR -

バッチファイルで関数は使えるのでしょうか?

投稿者投稿内容
未記入
会議室デビュー日: 2006/02/21
投稿数: 16
投稿日時: 2006-02-23 17:09
自分のPCから動作させるバッチファイルを作成しています。
バッチファイル初心者です。

set A=NAME_1

処理B(変数Aの値を使用する)

set A=NAME_ABC

処理B(変数Aの値を使用する)




変数Aの設定値には規則性は無い為、LOOP処理は使えないと思っています。
処理Bを関数化したいと考えていますが、どのようなコマンドがあるのでしょうか?
ご教授お願い致します。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-23 17:21
バッチって、このバッチで合ってますかね。
http://forum.nifty.com/fpcu/dosvcmd/batch.htm#call

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-02-23 17:26
引用:

変数Aの設定値には規則性は無い為、LOOP処理は使えないと思っています。



規則性がないからといって、Loop が使えないとは早計。
対象の List を Text としてもたしておいて、標準入力から読み込ませ、
Loop してやればできます。

help にももろに例文がのっています。
# とはいえ、複雑なのは、Batch では面倒なので WSH でやってしまうことが
# 非常に多いです。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-02-23 17:32
>変数Aの設定値には規則性は無い為、LOOP処理は使えないと思っています。

http://forum.nifty.com/fpcu/dosvcmd/batch.htm#for
の IN (セット) のセットには 「規則性は無い」 並びも 書けます。
========
MSH(Monad) では function があります。
========
書き方で
コマンドプロンプトをいじめてはいけません
本気で作ったとは思えないものなのですから
(その事情は知らないですが)

[ メッセージ編集済み 編集者: MMX 編集日時 2006-02-24 14:35 ]
未記入
会議室デビュー日: 2006/02/21
投稿数: 16
投稿日時: 2006-02-23 18:38
FOR構文を使用したいのですが、DO以下のコマンドが複数行の為、
改行して書こうとするとうまくいきません。

FOR %%A IN (A B C) DO echo %%A start
echo %%A end


%%A endは出力されません。
改行などの位置に決まりはあるのでしょうか?


coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-02-23 22:41
forの中に複数のコマンドを入れる場合は、括弧でくくります

FOR %%A IN (A B C) DO (
echo %%A start
echo %%A end
)


xvi30ss
常連さん
会議室デビュー日: 2004/11/22
投稿数: 48
お住まい・勤務地: 栃木県
投稿日時: 2006-02-23 22:53
こんばんわ。初めまして。

無理に1つのバッチファイルで処理するのでなく。
バッチファイルからバッチファイルを呼び出せば実現できると考えますが。

イメージ
>> FOR %%A IN (A B C) DO cmd.exe /p job.bat %%A
>> 
>> job.bat の中身
>> echo %1 start

  必要な処理を記述

>> echo %1 end

所詮MS-DOSの時代の人の作業をスクリプト化するのが目的です。元々「複数行を実行する」という概念がない時代の代物です。
C言語が登場した後に生まれたUNIXのシェルのような期待をもっても無理があるかと考えます。

_________________
ではでは。(^^/ 利休タヌキのxvi30ss
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-02-24 01:33
複数のコマンドをまとめるときは、丸括弧でくくる必要があります。
if〜elseなら、

if 条件 (
コマンド1
コマンド2
) else (
コマンド3
コマンド4
)

ただし、else と開き括弧の間にスペースがないとエラーになりますが(笑)

DOSのcommand.comと比べると、Windowsのcmd.exeは大幅に拡張されています。
(互換性にこだわったために色々と奇妙な仕様になっていて、不便な点も多いが)
あまりバカにしたもんじゃありません。

引用:

C言語が登場した後に生まれたUNIXのシェルのような期待をもっても無理があるかと考えます。


C言語やUNIXのシェル(Borne shell)は1970年代、MS-DOSは1980年代の誕生です。
DOSの640KB制限は有名ですが、初期のUnixは64KB制限内で動いていました。
DOSのcommand.comがUnixのshより機能的に大きく劣っているのはその通りですが、
それは時代の差に由来するわけではありません。

スキルアップ/キャリアアップ(JOB@IT)