DOSバッチ処理上級編 第3章 FORコマンドの変数
FORコマンドには、初心者の方には使い方がよくわからない変数がいくつかありますので、今日はその使い方を説明します!
まず、FORの変数をすべてリストアップしてみましょう。
~I - 引用符 (") をすべて削除し、%I を展開します。
%~fI - %I を完全修飾パス名に拡張します。
%~dI - %I をドライブ文字だけに拡張します。
%~pI - %I をパスだけに拡張します。
%~nI - %I をファイル名のみに拡張します。
%~xI - %I をファイル拡張子のみに拡張します。
%~sI - 短い名前だけを含むパスを拡張します。
%~aI - %I をファイルのファイル属性に拡張します。
%~tI - %I をファイルの日付/時刻に拡張します。
%~zI - %I をファイルのサイズに拡張します。
%~$PATH:I - path 環境変数にリストされているディレクトリを検索し、%I を最初に見つかった完全修飾名に展開します。環境変数名が定義されていない場合、またはファイルが見つからない場合、このキーの組み合わせは、空の文字列に展開されます。
各行に大文字のquot;I"があるのがわかりますが、このIは実はFORに持ってくる変数で、FOR文に代入する変数名はすべてここに書かれています。
例えば FOR /F %%z IN ('set') DO @echo %%z
ここでは、変数名zを代入し、そのIをzに変更する、例えば、%~fIを%~fzに変更する
前の%~pは、このような構文です。
では、さっそく始めましょう。
I. ~I - 引用符(")を削除し、%Iを展開します。
この変数は、彼が言うように、引用符を削除します!
この例を見てみましょう。
まず、次のような内容の一時ファイルtemp.txtを作成します。
1111
"2222"。
3333"
4444"44
"55"55"55
BATファイルは、以下のコードで作成することができます。
@echo off
echo ^"1111>temp.txt
echo "2222">>temp.txt
echo 3333^">>temp.txt
echo "4444"44>>temp.txt
echo ^"55"55"55>>temp.txt
rem above to create a temporary file, note that the unpaired quotation marks should be added to the escape character ^, do not leave spaces before the redirect symbol
FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i
pause
del temp.txt
実行後、CMDが次のように返ってくるのがわかります。
文字列#の前の引用符は削除されます
文字列の先頭と末尾の#quotesが削除されます
3333" #文字列の前の引用符はなく、後の引用符は保持される
4444"44 #文字列の前の引用符は削除され、中間の引用符は維持される
55"55"55 #文字列の前の引用符は削除され、中間の引用符は維持される
続行するにはいずれかのキーを押してください . . .
temp.txtの前の内容と比較してみてください。1、2、5行目の引用符が消えているのがわかりますが、これは引用符~iを削除した結果です
引用符の削除のルールは以下の通りです(BAT兄さん追加!)。
1. 文字列の最初と最後の両方に引用符が存在する場合、最初と最後の引用符を削除します。
2. 引用符が文字列の末尾に存在しない場合、文字列の先頭の引用符を削除します。
3. 引用符が文字列の途中、または末尾にのみ存在する場合、それらは削除されません。
II. %~fI - %I を完全修飾パス名に拡張する。
例をご覧ください。
コードは好きなところに保存してください。私はデスクトップに置いておきます。
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause
実行すると、以下のように表示されます。
test.bat
test.vbs
比較すると、パスがないことは簡単にわかりますが、これは "Iを完全修飾パス名に拡張した効果です" つまり、%i変数の内容がファイル名であれば、ファイル名だけでなく、そのファイルがある絶対パスを出力してくれます、自分の手で実験して確かめてみて下さいね!
III. %~dI - %I をドライブ番号のみに拡張する
例をご覧ください。
コードは以下の通りですが、やはりデスクトップに置いて実行することにしました
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
pause
実行後、私のCMDは次のように表示されます。
C:
C:
私のデスクトップは、2つのファイルtest.bat、test.vbs、%%~diは変数%%iの内容がファイルまたはディレクトリ名であれば、彼は彼にファイルを置くということです。
またはディレクトリがプリントアウトされたディスクシンボルに位置しています!
IV. %~pI - %I をパスだけに拡張する。
これは上記と同じで、パスだけを表示し、ファイル名は表示しません。
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause
私は結果を入力しません、あなたは結果を見るためにコードをコピーすることができ、次のいくつかは、そのような使用であり、コードが配られ、あなたは自分自身で結果を見ることができます!私は、あなたがそれを行うことができます。
V. V. %~nI - %I をファイル名だけに拡張する
ファイル名のみを表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
pause
VI. xI - %Iをファイル拡張子のみに拡張する
ファイル拡張子のみを表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
pause
VII. %~sI - 短い名前だけを含む拡張パス
短いファイル名の絶対値を表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
pause
VIIIです。%~aI - ファイルに%Iを拡張するファイル属性
ファイルの属性を表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
pause
IX. %~tI - %I をファイルの日付/時刻に拡張します。
ファイルが作成された日付を表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
pause
x. %~zI - %I をファイルのサイズに拡張します。
ファイルサイズを表示する
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
pause
上記の例の "delims==" は "delims=" に、つまりセパレータなしで変更することが可能です。
XIです。%~$PATH:I - path 環境変数にリストされているディレクトリを検索し、最初に見つかった完全修飾名まで %I を拡張します。環境変数名が定義されていない場合、またはファイルが見つからない場合、このキーの組み合わせは空の文字列に展開されます。
これが最後なんですが、上の全部と違うので、別にお話しますよ~。
そして、コードを一括保存して、デスクトップに置いてください。
@echo off
FOR /F "delims=" %%i IN ("notepad.exe") DO echo %%~$PATH:i
pause
Tornado added: The above code shows the result as C:\WINDOWS SYSTEM32 NOTEPAD.exe.
PATH変数で指定されたパスの中からnotepad.exeファイルを探し、notepad.exeがあればその絶対パスが出力され、なければエラーが出力されるという意味だそうです
さて、FOR変数については以上です。
関連
-
cmdデスクトップショートカット一括作成ツール
-
DOS比較演算子(LSS,LEQ,GTR,GEQ,EQU,NEQ)
-
バッチリ名称変更シリーズ ケースコード
-
指定したディレクトリにある全ファイルの一覧を取得するバッチ処理(bat)です。
-
Windowsでbatスクリプトを使用したFTPの時間指定アップロードとダウンロード
-
set /p=コマンドを詳しく説明します。
-
バットコードを共有し、ドラッグ&ドロップでファイル情報を取得可能
-
DOSバッチ処理による時限式シャットダウン操作の方法詳細
-
Dosバッチ書き込みワンクリッククリーンシステムジャンクbatコード
-
DOSバッチコマンド For loopコマンド詳細説明
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
一括ASCII文字比較サイズ実数表
-
バッチ処理における文字列分割コード
-
cmd 環境変数コマンド set 永続的な環境変数の設定 コマンド setx
-
システム時間抽出のためのBATバッチコード(バグ修正)
-
cmdで現在のシステム時刻を取得するバット
-
ファイル(フォルダ)の存在を検出するWindows用バッチプログラム
-
cmdのバッチ処理におけるset /a、set /pの違いについて
-
バッチ処理共通DOSコマンド(attrib、del、copy、xcopy)のバッチ処理マニュアル
-
DOSバッチ処理上級編 第5章 setコマンド詳細編
-
フォルダ内のサブフォルダやファイルを一定時間ごとにすべて削除する方法