[前の記事]« SETコマンドの基本的な使い方を知りたい
[次の記事]FOR /F相当の処理をWindows98で実現できないか? »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「バッチファイルの文法と環境変数」索引へ

WindowsNTとWin2000のバッチ処理関連コマンドの機能の違い

288.
WindowsNTとWin2000のコマンドの違い?
2004年03月04日(木) 10時22分
so-ta
こんにちは。
初めて質問させていただきます。

下記バッチを作成し、Win2000proにて実行したところ、
問題なく動いたのですが、これをWinNT4.0で実行したら
エラーが出て、動きません。

=====Test.bat=====
@echo off
%~1 >%2
if NOT %ERRORLEVEL% EQU 0 goto NG
:OK
for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %2`) do set FL=%%C
if %FL% == 0 goto NG
set /A TAIL=%FL%-1
more +%TAIL% %2 >%3
goto END
:NG
echo 1 >%3
goto END
:END
===================

実行時に下記コマンドをVBより起動させています。
test.bat "rsh [ホスト名] -l [ユーザID] -n [実行コマンド]" [出力ファイル名1] [出力ファイル名2]

WinNTでは、%~1の引数が取得できません。
「%1」なら取得出来ますが、ダブルクォーテーションがあるため、コマンドが実行できません。
修飾子「~」はWinNTではサポートされていないのでしょうか?

さらに、「%~1」の部分を固定のコマンドにして、
上の不具合を回避させた状態でコマンドを動かそうとすると、
「USEBACKQの使い方が誤っています」と表示されます。
(for~goto END まではHellcatさんの83)での発言を参考にさせていただいています)
これもWinNTではサポートされていないのでしょうか?

さらに、これらの回避方法をご存じでしたら、ご教授下さい。
よろしくお願いします。
290.
Re:WindowsNTとWin2000のコマンドの違い?
2004年03月04日(木) 18時27分
じゃく
>下記バッチを作成し、Win2000proにて実行したところ、
>問題なく動いたのですが、これをWinNT4.0で実行したら
>エラーが出て、動きません。
(中略)
>for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %2`) do set FL=%%C
(中略)
>「USEBACKQの使い方が誤っています」と表示されます。
>これもWinNTではサポートされていないのでしょうか?

>さらに、これらの回避方法をご存じでしたら、ご教授下さい。

手元のNTのfor文ヘルプの控えを見ると
usebackq
オプションはありません。
usebackq をつかわなければいいのでは?

for /F "tokens=1,2,3" %%A in ('find /V /C "" %2') do set FL=%%C

これで動くと思いますよ。(当方XPマシンで確認。NTでは未確認)
293.
Re:WindowsNTとWin2000のコマンドの違い?
2004年03月04日(木) 21時19分
oo
>こんにちは。
>初めて質問させていただきます。

>下記バッチを作成し、Win2000proにて実行したところ、
>問題なく動いたのですが、これをWinNT4.0で実行したら
>エラーが出て、動きません。

コマンドにどういう機能があるかは、call /? とか for /? で表示されますので、そこに書いてあれば使えるし、書いてなければ使えません。

>WinNTでは、%~1の引数が取得できません。
>「%1」なら取得出来ますが、ダブルクォーテーションがあるため、コマンドが実行できません。
>修飾子「~」はWinNTではサポートされていないのでしょうか?

NT4の環境がないので、%~1 の機能が無いのかどうかは知りませんが、もし無いのなら、
cmd /c %1 > %2
でどうでしょうか?
294.
Re:WindowsNTとWin2000のコマンドの違い?
2004年03月05日(金) 21時13分
YanaKen
so-taさん こんにちは。

>WinNTでは、%~1の引数が取得できません。
>「%1」なら取得出来ますが、ダブルクォーテーションがあるため、コマンドが実行できません。
>修飾子「~」はWinNTではサポートされていないのでしょうか?

 NT4にも修飾子 ~ を用いた変数の展開機能そのものは存在します。ただ、 Windows2000以降と比べると若干機能が少ないです。具体的には、

%~1   (引用符の削除)
%~a1  (アトリビュートの抽出)
%~t1 (タイムスタンプの抽出)
%~z1 (ファイルサイズの抽出)

 ……などが(ヘルプによれば)存在しないようです。なので、そのへんの機能を使ったバッチ処理では互換性が失われます。それ以外は共通です。
 NT上での 「%~」関連の詳細な情報は、じゃくさんが紹介されている「FOR /?」、および「SET /?」で見ることができます。

YanaKen
297.
Re2:WindowsNTとWin2000のコマンドの違い?
2004年03月08日(月) 17時44分
so-ta
レスが遅くなってすみません。
YanaKenさん、ooさん、じゃくさん、
ありがとうございました。

「%~1」の件は、ダブルクォーテーションを外し、
スペースで区切られたもの全て引数として、
SHIFTしながら受け取ることにしました。

「usebackq」の件は、
じゃくさんのコメントを参考にやってみます。

みなさん、ご親切に教えていただいてありがとうございました。
 
 


カテゴリー「バッチファイルの文法と環境変数」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年03月04日 15:22に投稿されたエントリーのページです。

ひとつ前の投稿は「SETコマンドの基本的な使い方を知りたい」です。

次の投稿は「FOR /F相当の処理をWindows98で実現できないか?」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート