Uncle_JohnのPCの部屋

アクセスカウンタ

zoom RSS こんな事出来ます。数行のバッチファイル集

<<   作成日時 : 2013/02/25 12:24   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 6 / トラックバック 0 / コメント 0

個人的に作ったバッチファイルや他の方のリンクを紹介します。
❶特定のファイルを隠しファイルにする。
❷日付時間のファイル名のメモ帳を開く
一日に何度でもいくつでも作れる。
❸最近使ったファイルのショートカットのみを消す。
❹PCの電源を落とす。
❺PCを再起動する。
❻サブフォルダのファイル名をCSV出力
(CSV→Excelで読めるデータ形式)
❼一定の容量ファイルを抽出
❽ファイルをキーワードで整理する。
ファイル名の一部をキーワードにして整理する
❾指定した時間にプログラムを起動する
週報や月報などの処理に便利
❿特定の処理にパスワードを設定する。
ただし、高尚なものではありません。
⓫サブフォルダーデータの拡張子を纏めてスクランブル
(拡張子を変えて見れなくする。何のデータか分からなくする)
【BATファイルのワンポイント】
⓬タイムスケジューラで起動するBATファイルに必要な一行
【コマンドプロンプトやバッチを色々記載、考察している人のサイトから】
⓭ファイル名を特定の文字までを削除したい
【アレンジ1】
◆スペースやアンダーバー「_」をファイル名から抜く
【アレンジ2】
◆半角全角のアンダーバーやハイフンを統一する
⓮バッチファイルで音をだす。WAV等Winアプリを介さずファイル再生(※6)
⓯バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法 (リンクのみ添付)
⓰ファイル名をキーワードと通し番号001〜999等のファイル名に変更する
◆フォルダー内全データファイルを通番
◆特定のデータ(拡張子)のみファイル名+通番にする。
◆特定のキーワードを含むファイル名を通番ファイル名+通番にする。 (※9)
⓱ファイル名の長さが異なるファイル名の一部分のみの変更
◆人名や会社名を漢字からローマ字或はローマ字から漢字に変換したり、姓名を名姓の順やイニシャルに入れ替えたりする。
◆指定ワード以外はそのままのファイル名となる。(前や後ろのサフィックスや通し番号はそのまま)(※12)


過去にQ&A等で回答した事例も入れました。
詳しく検証していないけれど役立ちそうなサイトリンクも入れました。
書き込みのコマンド等は充分にダミーデータで検証して使ってください。
バッチファイルは「やり直し」は出来ません。

(当時の確認はWindows XPですが他のOSも考え方は同じです。
私はWindows XPで作成したバッチファイルを検証の上、そのまま、Windows 8/10で使っているバッチファイルがあります。
重要なデータの書き換え、移動は注意が必要ですのでデバッグを充分に実行してください。※3)

画面の都合上の折り返しに注意してください。




【サンプルリスト】
❶特定のファイルを隠しファイルにする。
"秘密"という文字列を含む名前のファイルで拡張子がjpで始まる任意の拡張子データ、jpgやjpegを含むファイルを隠し属性にします。
例えばファイル名
IMG_0001秘密.jpg、秘密IMG_0002.jpg
が対象となります。主に写真です。
秘密で無くても個人名とかご自由に!!
念のためbmpデータも実行。

特定のフォルダに入れて使用する。
適用範囲はそのフォルダとサブフォルダ
===<JPG_hide.BAT>===
attrib +h *秘密*.jp* /s
attrib +h *秘密*.bmp /s
exit
===ここまで3行===

元に戻すには
===<JPG_appear.BAT>===
attrib -h *秘密*.jp* /s
attrib -h *秘密*.bmp /s
exit
===ここまで3行===

サブフォルダにいれてその親フォルダのサブフォルダ全部に適用
===<JPG_hide.BAT>===
cd ..
attrib +h *秘密*.jp* /s
attrib +h *秘密*.bmp /s
exit
===ここまで4行===

元に戻すには
===<JPG_appear.BAT>===
cd ..
attrib -h *秘密*.jp* /s
attrib -h *秘密*.bmp /s
exit
===ここまで4行===

隠しファイルが見れる設定にすれば意味がありませんが…
そう言う人はファイル名拡張子を『ren』で変えてしまえば…
後述のパスワードも組み合わせると結構面白いかもしれません。




❷日付時間のファイル名のメモ帳を開く
一日に何度でもいくつでも作れる。
===<DateFileNote.BAT>===
@echo off
set fname=%TIME::=%
set fname=%fname:~0,6%
set fname=%fname: =0%
set fname=%DATE:/=%_%fname%
type nul > %fname%.txt
start notepad.exe %fname%.txt
exit
===ここまで8行===

利用の仕方はバッチファイルをディスクトップにおいて、上司の命令や電話を受けて要件をメモする代わりにクリックしてディスクトップにメモ帳が作成されると言った具合です。
要件がクリアになったら日付メモ帳を捨てます。要件を受けた時間もファイル名で分かるし…




❸最近使ったファイルのショートカットのみを消す。
WindowsXpの場合
他のOSはcdの指定など注意
===<RecentErase.BAT>===
@echo off
echo ******************************
echo 最近使ったファイルのショートカットを消す。
echo ******************************
c:
cd "c:\documents and settings\John\recent"
dir /w
set /p USER_DATA_INPUT="ショートカットを消去しますか?(y/n)"
if /i %USER_DATA_INPUT%==y (erase *.lnk) else exit
pause
exit
===ここまで11行===

注意)ショートカットの拡張子は「lnk」です。




❹PCの電源を落とす。
動作はWindowsXpで確認
===<PCShutdown.bat>===
@echo off
cd c:\windows\system32
start shutdown.exe /s /t 30
exit
==ここまで4行===




❺PCを再起動する。
動作はWindowsXpで確認
===<PCReStart.bat>===
@echo off
cd c:\windows\system32
start shutdown.exe /r /t 30
exit
==ここまで4行===




❻サブフォルダのファイル名をCSV出力 (←❻項全面改訂 ※8)
二つの方法を紹介します。File名だけを取り出すには(2)項のFor文を以下に変更してください。現状では(1)(2)項共にフルパス出力ですがパスを除くファイル名のみ抽出の場合は(2)項のFor文を工夫します。現状のリストは(1)(2)共にファイルの順序以外ほゞ等価の結果が得られます。時間的にはDirが圧倒的に早いようです。
(注意:Dirは何故かこれから出力するCVSファイルが含まれ、1件のみ多い)

(1) Dir のサブフォルダーオプション(/s)を利用する。
Dirのオプションを工夫することでフォルダー名もリストされたりします。

動作はWindows10で確認
===<FileListDirOut.bat>===
rem ファイル名出力
@echo off
dir /w /o:g
echo ****************************
echo フォルダー中のファイルをCSV形式でリスト出力します。
set /p F_NAME_INPUT="リストを出力するファイル名を入力してください?(.csv入力不要)"
if exist %F_NAME_INPUT%.csv goto :EXTFILE
dir /a:-d-s-h /b /s >> %F_NAME_INPUT%.csv
goto :EOF
:EXTFILE
echo ファイルが既に存在します。再度起動し別の名前を入力してください。
pause
exit
==ここまで13行===

(2) Forを利用してファイル名を出力する。
パスを除くファイル名のみ抽出の場合はfor文を一行以下にしてください。画面上折り返していますので注意してください!
for /r %%I in (*) do echo "%%~nI%%~xI" >> %F_NAME_INPUT%.csv
もしくは、もっと簡単に
for /r %%I in (*) do echo "%%~nxI" >> %F_NAME_INPUT%.csv

動作はWindows10で確認
===<FileListForOut.bat>===
rem ファイル名出力
@echo off
dir /w /og
echo ****************************
echo フォルダー中のファイルをCSV形式でリスト出力します。
set /p F_NAME_INPUT="リストを出力するファイル名を入力してください?(.csv入力不要)"
if exist %F_NAME_INPUT%.csv goto :EXTFILE
for /r %%I in (*) do echo "%%~dI%%~pI%%~nI%%~xI" >> %F_NAME_INPUT%.csv
goto :EOF
:EXTFILE
echo ファイルが既に存在します。再度起動し別の名前を入力してください。
pause
exit
==ここまで13行===

forはいかでもOK
===
for /r %%I in (*) do echo "%%~dpnxI" >> %F_NAME_INPUT%.csv
===この一行(行の折り返し注意)



❼一定の容量ファイルを抽出
↓↓
http://soudan1.biglobe.ne.jp/qa7958463.html




❽ファイルをキーワードで整理する。
これは結構すぐれものです。
moveコマンドに/-yオプションを付けるとかすれば完璧かも…
細かい動作確認はしていませんが拡張子とか意識しなくても出来ました。
ファイル名の一部(共通項)をキーワードにして別フォルダに分類です
写真やテキストデータなどファイル名を適宜変えているとかならば結構使いでがあります。
結構危険が伴いますのでダミーデータでデバッグしてください。

ファイルをキーワードでフォルダに振り分けるバッチ
↓↓
http://d.hatena.ne.jp/kazuki-kido/20070803/1186159519

コーディング例
報告書-会社A.docx
報告書-会社B.docx
報告書を会社名フォルダなどに整理したつもりが…
そんな場合にバッチファイルを作ってクリックし実行すると整理してくれます。

===
%echo on
set KEYWORD="会社A"
mkdir %KEYWORD%
for /r %%i in (*%KEYWORD%*) do move "%%i" %KEYWORD%

set KEYWORD="会社B"
mkdir %KEYWORD%
for /r %%i in (*%KEYWORD%*) do move "%%i" %KEYWORD%



===




❾指定した時間にプログラムを起動する
週報や月報など定期的にソフトやデータを起動できれば便利かも…
Windowsでも出来ると思いますが他にもいろいろ載っています。

【コマンドプロンプトで効率Up】から
コマンドプロンプトで指定した時間にプログラムを起動する
↓↓
http://cmd-pro.com/m_timer.html




❿特定の処理にパスワードを設定する。
⓫サブフォルダーデータの拡張子を纏めてスクランブル
(⓫項全面改訂 ※8)
都合上、纏めて説明します。

エクセルデータの拡張子「xlsx」をちょっといじって見れなくします。
この場合「ysx」にしてしまいます。「*」の部分にワイルドカードを上手く使えば特定のデータのみ対象にすることが出来ます。

まず、見れなくするには実質1行です。
バッチファイルとデータが同じフォルダにあれば
===
ren *.xlsx *.ysx
===
親フォルダにバッチファイルを置いてそこにあるサブフォルダ、子フォルダの中のエクセル全部を対象にするにはやっぱり1行です。ある意味これがバッチファイルの魅力です。
子フォルダを対象の場合
===
for /D %%d in (*) do ren %%d\*.xlsx *.ysx
===
又は、子、孫、ひ孫等のフォルダを対象にするには
===
for /r %%I in (*) do if /I "%%~xI"==".xlsx" ren "%%~fI" "*.ysx"
===
(for はワイルドカードを利用して
===
for /r %%I in ("*.xlsx") do ren "%%~fI" "*.ysx"
===
でもOK  ※10)
/d や/r はスペースを含むファイル名は必要に応じワイルドカードや引数ごと""でくくってください。

さて、元に戻すコーディングは拡張子を逆に指定すればいいのですが誤ってクリックされるとばれてしまいます。
ちなみに
===
ren *.ysx *.xlsx
===
又は
===
for /D %%d in (*) do ren %%d\*.ysx *.xlsx
===
又は、
===
for /r %%I in (*) do if /I "%%~xI"==".ysx" ren "%%~fI" "*.xlsx"
===
(for はワイルドカードを利用して
===
for /r %%I in ("*.ysx") do ren "%%~fI" "*.xlsx"
===
でもOK  ※10)
/d や/r はでスペースを含む場合%d等変数やワイルドカード含めて""で囲んでください。
for 文はコマンドプロンプトのコマンドとしても使えますが、CD(カレントディレクトリ)の注意が必要です。
また%% はコマンドプロンプトでの手入力では%の一個でコマンドとしても使えますが注意が多いのでバッチとして使う事をお薦めします。

複雑な処理はサブルーチンで、サブルーチンの引数は順番に%~1,%~2,%~3…で受け取れます。SUB文は受け渡し引数をカンマで切っていますが、半角スペースでも動作しました。
===
for /r %%I in (*) do call :sub "%%~xI","%%~fI"

pause
exit /b

:sub
rem 以下からgoto :EOFの間に引数の受け取りと処理を行う

set expandname=%~1
set filename=%~2

if /I %expandname%==.YSX ren "%filename%" "*.XLSX"

rem pause next
goto :EOF
===

(↑ここまで⓫項全面改定分)

これではつまらないのでパスワードを付けます。半角の「ABCD」にしました。また都合上4桁ですが好きに設定してください。

===ここから
set /p USER_DATA_INPUT="コード入力(4ケタ):"
if /i %USER_DATA_INPUT%==ABCD (for /D %%d in (*) do ren %%d\*.ysx *.xlsx) else (ECHO コードが違います!!)
pause 終了します!!
===ここまで3行

バッチファイルを覘かれると嫌ですね!何となく意味がわかってしまうし…
そこでメモ帳で好きなパスワードを1行入れてそれと比較します。
また、メモ帳で保存するときに拡張子まで指定します。
拡張子をtxtで保存して無理やり拡張子名を変えても構いません。
Windows上で予約の無い拡張子なら何でもいいのですが「xxx」としました。
出来ればそれらしいものがいいと思います。
この場合『PW_FILE.XXX』と言う名前でパスワードを1行のみ入れてバッチファイルと同じ場所にメモ帳で保存します。出来れば隠し属性にした方がいいと思います。
(※1)
さて、メモ帳で拡張子まで指定して開くことが出来ますが一旦開いてしまうとWindowsが覚えてしまって次からはクリックしただけで開いてしまいますのでメモ帳では開かないようにしてください。
その場合Windows上でキャンセルする必要があります。
(※1ここまで)

===メモ帳『PW_FILE.XXX』のコーディング
ABCD
===ここまで

(※1)
ちなみに「for /i」では「abcd」でも通ってしまいます。
この場合は「/i」を削除します。
その辺り含め後の工夫はお任せします。
基本コマンドなどのコーディングには大文字(ABCD...)、小文字(abcd...)は区別は有りませんが指定したり、変数の文字など一部、区別される場合があります。
(※1ここまで)
数字でも多分全角でもキーワード、パスワードとして使えると思います。
メモ帳のこのデータは拡張子を変えたのでクリックしただけではこのファイルは覘けません。
内容を確認するにはコマンドプロンプト上でCD(コマンドのカレントディレクトリCDの事です・ディレクトリ=フォルダ)を合わせた上で
C:\ABCD\EFG>type pw_file.xxx
とするか拡張子を一旦、「txtに戻します」
さて大文字小文字ごっちゃですけど使えますのであしからず、技術的にはたぶんACCII文字(1バイト文字時代)の最上位ビットを無視しているだけです。バイトデータの最上位ビットを無視(0でも1でも同じに扱う)

===ここから
SET /P P_WORD=<PW_FILE.XXX
set /p USER_DATA_INPUT="合言葉は?「山」:"
if %USER_DATA_INPUT%==%P_WORD% (for /D %%d in (*) do ren %%d\*.ysx *.xlsx) else (ECHO 残念でした!バイバイ!!)
pause 終了します!!
===ここまで4行

コマンドプロンプトやプログラムを知らない人には厄介です。
でも知っている人なら簡単ですけど…
if文の構成をいじって隠し属性にまでするとかすればもっと高尚ですが所詮バッチなのでこれ位にしときます。

(※8)
zzzzzzzzzzzzz
サンプル
【拡張子を秘密の拡張子に】
===
@ECHO OFF
COLOR B
CLS
echo 処理中です。暫くお待ちください!
for /r %%I in (*) do if /I "%%~xI"==".xlsx" ren "%%~fI" "*.ysx"
exit
===

【復元時】
===
@ECHO OFF
COLOR B
CLS
ECHO ***********************************
ECHO File Relive Ver.1.0
ECHO ***********************************

SET /P P_WORD=<PW_FILE.XXX
set /p USER_DATA_INPUT="合言葉は「山」:"
echo 処理中です。暫くお待ちください!
if not %USER_DATA_INPUT%==%P_WORD% goto :NOTPASS

for /r %%I in (*) do if /I "%%~xI"==".ysx" ren "%%~fI" "*.xlsx"

echo 終了します!!
exit
:NOTPASS
echo 残念でした!バイバイ!!
pause
exit
===
zzzzzzzzzzzzz
パスワードファイル上記の場合「PW_FILE.XXX」は前述の通り別途ご用意ください!
(※8ここまで)




【BATファイルのワンポイント】

⓬タイムスケジューラで起動するBATファイルに必要な一行

タイムスケジューラでバッチファイルを動かしたいときは
バッチファイルの先頭行に半角英文字で
===
cd /D %~dp0
===この一行
を追加してみてください。
詳細は以下のサイトで

タスクスケジューラに登録したバッチファイルが動かない
↓↓
http://www.love-hokuto.com/?p=1248

私は本件を詳細に検討した訳ではありませんが、基本、BATファイルはそのファイルが、ショートカットでもショートカットのリンク先の本体BATが存在するファイルの場所がコマンドプロンプトのカレントディレクトリになります。
その関係がタイムスケジューラでは上手くいかない様です。

その辺を検討されているのが以下Q&Aです。

(ご参考程度)
タスクスケジューラでbatファイルを動かしたい
↓↓
http://soudan1.biglobe.ne.jp/qa9157215.html




(※5
【コマンドプロンプトやバッチを色々記載、考察している人のサイトから】

⓭ファイル名を特定の文字までを削除したい
↓↓
http://d.hatena.ne.jp/jak-san/20090305/1236256670
↓↓
「23564_abcdef_1a2b3c」というような「_」で繋いだ文字列のファイル名を、最初の「_」までを、その「_」自身も含めて削除したいのです。

このサイトはコマンドプロンプトに関して色々と結構面白い考察があります。

上記サイトをアレンジ

【アレンジ1】
◆スペースやアンダーバー「_」をファイル名から抜く

特定の文字を纏めて削除するのに使えます。
対象はバッチファイルのあるフォルダのみ

特定の文字に替える場合、以下のcall文を
call set newname=%%fname:【文字A】=【文字B】%%
以下の例では削除なので【文字B】は全く文字が入りません。
ファイル名 ABC_001.txt→ABC001.txt 等にする

応用として「(」、「)」を外したりもできます。

半角、全角アンバーバーの例
===
@echo ******** UnderBarReject.bat ********
@echo off
@echo 処理しています。しばらくお待ちください。
for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
@echo 処理が終わりました。
pause
exit /b
:sub
set fname=%~1
set n=0

:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if "%c%"=="" goto :EOF
if "%c%"=="_" goto break0
if "%c%"=="_" goto break1
goto loop

rem 半角"_"処理

:break0
call set newname=%%fname:_=%%

if "%newname%"=="" goto :EOF
if "%newname:~0,1%"=="." goto :EOF
ren "%fname%" "%newname%"
goto :EOF

rem 全角"_"処理

:break1
call set newname=%%fname:_=%%

if "%newname%"=="" goto :EOF
if "%newname:~0,1%"=="." goto :EOF
ren "%fname%" "%newname%"
goto :EOF
===

尚、スペースやアンダーバーを削除した結果、同じファイル名になる場合のエラー処理は考慮していません。
やってみたところ、ファイル名が既に存在する場合、リネーム(ren)は実行されません。
以下【アレンジ2】も同様です。

【アレンジ2】
◆半角全角のアンダーバーやハイフンを統一する

対象はバッチファイルのあるフォルダのみ
応用例としてbreakの数を増やしてハイフン「ー」、「−」、「‐」、「-」を一定の文字半角「-」に統一したりできます。

===
@echo ******** UnderBar.bat ********
@echo off
@echo 処理しています。しばらくお待ちください。
for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
@echo 処理が終わりました。
pause
exit /b

:sub
set fname=%~1
set n=0

:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if "%c%"=="" goto :EOF
if "%c%"=="_" goto break
goto loop

rem 全角"_"→ 半角変換処理

:break
call set newname=%%fname:_=_%%

if "%newname%"=="" goto :EOF
if "%newname:~0,1%"=="." goto :EOF
ren "%fname%" "%newname%"
goto :EOF
===



※5ここまで)



(※6
⓮バッチファイルで音をだす。WAV等Winアプリを介さずファイル再生

詳しくは以下URLを参照ください。
応用としては、特定の処理が終わったら、音をだして終了を教えるとか?

バッチで,wavなどの音声を再生しよう (コマンドプロンプトから音を鳴らす方法)
↓↓
http://language-and-engineering.hatenablog.jp/entry/20100729/p1

コピペがしづらかったので以下に@mshata以外の行は「Windows10版に若干変えて、抜粋します。
@mshta "about:playing...行は長いですがネタ元のの添付リンクサイトからコピペして下さい。
”くの字括弧”記号が本ブログのコントロールコード(タグ)になっているので本ブログでは貼り付け出来ませんでした。

===ここから
@rem 音源の場所を指定
@set WAVPATH=C:\WINDOWS\Media\Alarm02.wav
@rem 再生時間長をミリ秒で指定
@set HTA_MAX_TIME=5000
@rem 再生実行
@mshta "about:playing... ←この行は上記サイトでコピペしてください
@pause
===ここまで

@はコンソール画面に処理等を表示しない様に付加
「set WAVPATH=」には実際に使うPCのWevデータを指定します。
後は、@mshta以外そのままコピペでOKです。

【応用例】
sfcはともかく、dismはパラメータが覚えられない!
時間が掛かるし終わった時、音を鳴らしたい!
なお、sfcやdismは管理者で実行が必要です。
【ワンポイント】バッチファイルを管理者で動かすには?
・バッチファイルで右クリックで「管理者として実行」
もしくは
・バッチファイルのショートカットを作りそのショートカットで右クリック→プロパティの「ショートカット」タブで詳細設定して管理者として実行できるようにし、ショートカットをクリック実行します。


===【音付、開始終了の時間表示版sfc、dismバッチ】(Windows8/8.1/10用)
@rem 音源の場所を指定
@set WAVPATH=C:\WINDOWS\Media\Alarm02.wav

@rem 再生時間長をミリ秒で指定
@set HTA_MAX_TIME=5000

@rem 再生実行

@date /t
@echo sfc スタート
@time /t

sfc /scannow

@time /t

@mshta "about:playing... ←この行は上記サイトでコピペしてください


@pause

@echo dism スタート
@time /t

DISM /Online /Cleanup-Image /RestoreHealth

@time /t

@set WAVPATH=C:\WINDOWS\Media\Alarm01.wav
@set HTA_MAX_TIME=5000
@mshta "about:playing... ←この行は上記サイトでコピペしてください


@pause
===
sfc実行後、音で終了を知らせます。
任意のキーでdismがスタート、必要が無ければコンソール右上[×]で終了
(Y/Nを入力させた方がスマートですがそこはご自分で考えてください)
なお、sfc、dismをキー入力なしに続けて実行したければ
@echo dism スタート
の前の
@pause
を削除してください。
空白行は実行時の見栄えを考えての事です。

※6ここまで)


===



(※7
半角%やチルダを理解するのは難しいです。
以下のサイトはその参考にもなります。

⓯バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
↓↓
http://orangeclover.hatenablog.com/entry/20101004/1286120668

※7ここまで)



(※9
⓰ファイル名をキーワードと通し番号001〜999等のファイル名に変更する

特定のファイル(JP*=JPGとJPEG)のみとか特定のワードを含むファイル名のみ通番ファイル名に変更も可能

バッチファイルでファイル名を通し番号のファイル名に変更(特定キーワードや特定データのみ変更可)
↓↓
http://uncle-johns-room.at.webry.info/201802/article_1.html

※9ここまで)



(※12
⓱ファイル名の長さが異なるファイル名の一部分のみの変更

会社名、人名部分をローマ字から漢字へ、漢字からローマ字への変更など

「KaisyaA001」→「会社名A001」等への変更
「2018kaisyaA002」→「2018会社A002」等への変更

バッチファイルでファイル名の長さに関係なく特定のワードを別の文字列にする
↓↓
http://uncle-johns-room.at.webry.info/201803/article_1.html

※12ここまで)



【付録】

バッチファイルの作り方
↓↓
http://uncle-johns-room.at.webry.info/201302/article_1.html

(※11ここから
【最後に】

・コマンドプロンプトに関して
コマンンドプロンプトはインタプリタ系の動作をします。
インタプリタとはコンパイル系の言語とは異なり一行ずつ機械語に、CPUに理解可能なコードに変換して処理をします。
コンパイラ系言語は全文を纏めて機械語に変換します。
exeファイルはコンパイルされた機械語のデータの塊です。
対してこのインタプリタは一行ずつ機械語に変換して処理をし、終わったら次の行を読み込みます。
故に、エラー行を読みこんで初めてエラーが出ます。
また、このコマンドプロンプトのバッチファイル処理は旧来のインタプリタ系プログラム言語のBESICとも異なり原則、エラーメッセージなど不十分で何がエラーか分かりずらいです。

ちょっとわかり辛いエラーに前飛ばしのgotoがあります。
前に飛ばすgoto [:ラベル]は注意が必要です。
いきなり、コンソールが閉じてエラーが分からない事が有ります。
経験ですが殆どのケースで定数、変数、文字列変数等の定義の問題の様です。
バッチのメインやサブルーチンの最初の方で定数、変数、文字列変数等の定義を行ってください。その後の行にgotoで飛ばすようにします。
C言語やVBの様に処理前に文字列や変数を定義してしてその後の行で自由にgotoで飛ばすと言う事です。

また、基本コマンドプロンプトのコマンド仕切り記号は「半角スペース」です。
コマンドの引数の文字列がファイル名でスペースがあったり、サブルーチン引き渡しの文字にスペースがあると仕切り記号と認識し引数がずれたりします。その場合引数、文字列をダブルクォーツ「"」で囲んでください。
ワイルドカードも""内で使用可能の様です。

※11ここまで)


2013/04/04 全面改定
(※1)2013/04/23 大文字、小文字の区別に関する訂正、その他
(※2)2013/06/21 一部追加、2013/06/29 /r の場合の注記追加
(※3)2015/08/12 OSに関して追記
(※4)2015/10/22 コマンドプロンプトに関して追記
(※5)2017/03/13 ファイル名編集バッチファイルサイト追加、goto文記載注記追加
(※6)2017/05/19 wavファイル等、バッチ上で再生を追記 05/23 mshta コピペ不備訂正
(※7)2017/05/31 ファイル名やパスに関するバッチリンク追加、見辛くなってきたので◆→❶へ訂正
(※8)2018/02/23 for /r /d コーディング変更 ❻項⓫項全面変更、及びサンプル追加
(※9)2018/02/23 ⓰追加
(※10)2018/03/09 forの改良→「for /r /d %%I …」は基本的に間違ったコーディングの様ですが、動いていたのでそのままにしていましたが、勉強にならないので改良しました。
(※11)2018/03/13 goto 注意文【最後に】全面改訂
(※12)2018/03/29 ⓱追加

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 6
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
こんな事出来ます。数行のバッチファイル集 Uncle_JohnのPCの部屋/BIGLOBEウェブリブログ
文字サイズ:       閉じる