Uncle_JohnのPCの部屋

アクセスカウンタ

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

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

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

個人的に作ったバッチファイルや他の方のリンクを紹介します。
◆特定のファイルを隠しファイルにする。
◆日付時間のファイル名のメモ帳を開く
一日に何度でもいくつでも作れる。
◆最近使ったファイルのショートカットのみを消す。
◆PCの電源を落とす。
◆PCを再起動する。
◆サブフォルダのファイル名をCSV出力
(CSV→Excelで読めるデータ形式)
◆一定の容量ファイルを抽出
◆ファイルをキーワードで整理する。
ファイル名の一部をキーワードにして整理する
◆指定した時間にプログラムを起動する
週報や月報などの処理に便利
◆特定の処理にパスワードを設定する。
ただし、高尚なものではありません。
◆サブフォルダーデータの拡張子を纏めてスクランブル
(拡張子を変えて見れなくする。何のデータか分からなくする)
【BATファイルのワンポイント】
◆タイムスケジューラで起動するBATファイルに必要な一行
【コマンドプロンプトやバッチを色々記載、考察している人のサイトから】
◆ファイル名を特定の文字までを削除したい

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

(当時の確認はWindows XPですが他のOSも考え方は同じです。
私はWindows XPで作成したバッチファイルを検証の上、そのまま、Windows 8で使っているバッチファイルがあります。
重要なデータの書き換え、移動は注意が必要ですのでデバッグを充分に実行してください。※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出力
===<FileListOut.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 /d %%d in (*) do dir /b /on %%d\*.* >> %F_NAME_INPUT%.csv
goto :EOF
:EXTFILE
echo ファイルが既に存在します。再度起動し別の名前を入力してください。
pause
exit
==ここまで13行===

(※1)
「for /r /d」は基本的に間違ったコーディングの様ですがローカルディスク(D:)等でマイドキュメント以外では一応使えます。
ただし、一部の特殊フォルダではエラーとなる場合があります。
マイドキュメントやマイピクチャなどで「構文エラー」を確認しました。
これ以上の工夫、デバッグはお任せします。
(※1ここまで)

◆一定の容量ファイルを抽出
↓↓
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

◆特定の処理にパスワードを設定する。
◆サブフォルダーデータの拡張子を纏めてスクランブル
都合上、纏めて説明します。

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

まず、見れなくするには実質1行です。
バッチファイルとデータが同じフォルダにあれば
===
ren *.xlsx *.ysx
===
親フォルダにバッチファイルを置いてそこにあるサブフォルダ、子フォルダの中のエクセル全部を対象にするにはやっぱり1行です。ある意味これがバッチファイルの魅力です。
===
for /D %%d in (*) do ren %%d\*.xlsx *.ysx
===
(※2ここから)又は、
===
for /r /d %%d in (*) do ren %%d\*.xlsx *.ysx
===
/r はスペースを含むファイル名に使えません。
※2 ここまで)

さて、元に戻すコーディングは拡張子を逆に指定すればいいのですが誤ってクリックされるとばれてしまいます。
ちなみに
===
ren *.ysx *.xlsx
===
又は
===
for /D %%d in (*) do ren %%d\*.ysx *.xlsx
===
(※2ここから)又は、
===
for /r /d %%d in (*) do ren %%d\*.ysx *.xlsx
===
/r はスペースを含むファイル名に使えません。
※2 ここまで)
これではつまらないのでパスワードを付けます。半角の「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文の構成をいじって隠し属性にまでするとかすればもっと高尚ですが所詮バッチなのでこれ位にしときます。


【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」というような「_」で繋いだ文字列のファイル名を、最初の「_」までを、その「_」自身も含めて削除したいのです。

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

※5ここまで)

===


【付録】

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

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

・コマンドプロンプトに関して
コマンンドプロンプトはインタプリタ系の動作をします。
インタプリタとはコンパイル系の言語とは異なり一行ずつ機械語に、CPUに理解可能なコードに変換して処理をします。
コンパイラ系言語は全文を纏めて機械語に変換します。
exeファイルはコンパイルされた機械語のデータの塊です。
対してこのインタプリタは一行ずつ機械語に変換して処理をし、終わったら次の行を読み込みます。
故に、エラー行を読みこんで初めてエラーが出ます。
また、このコマンドプロンプトのバッチファイル処理は旧来のインタプリタ系プログラム言語のBESICとも異なり原則、前の行に飛ばすことが出来ません。
goto文など常に後ろの行に飛ばすか「goto :EOF」としてそこで処理を終わらせるしか出来ないので注意してください。
(※5:goto文で前行に飛ばすことに関して、Call文など例外があるみたいです。もしくは無限ルールを避けるために終了コードが中に無いと前に戻せないとか、この辺は思考錯誤してください。前項の「◆ファイル名を特定の文字までを削除したい」をご一読ください。)
本来、OSの構築など一行ずつ処理してWindowsを構築、スタートさせるものと同じ機能なので高尚な処理、前の行へ飛ばす、処理済みの行に飛ばす、という事は出来ないので注意してください!

※4ここまで)


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文記載注記追加

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

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