TODO
- 7Zip⇒D&Dで圧縮できるバッチを用意したい!!
- Sleep関連⇒timeoutコマンド
- ネットワークドライブの割り当て/切断
- リモートデスクトップ接続(mstsc)
コマンドプロンプト操作
if文操作
【参考サイト】
◆.bat(バッチファイル)のifコマンド解説。
https://qiita.com/plcherrim/items/8edf3d3d33a0ae86cb5c
ファイル比較
※行レベルで様々な比較オプション有
【参考サイト】
◆fc - Windowsコマンド虎の巻
https://windows.command-ref.com/cmd-fc.html
Oracle操作
> echo select * from dual; | sqlplus scott/tiger
【参考サイト】
◆SQL*Plus に標準入力からSQL文を流し込む
https://qiita.com/chimatter/items/ceb8e298a5eb6f466fdf
ファイル検索
REM
REM 指定フォルダ内の特定日付以降のファイル一覧表示
FORFILES /P C:\wakasama /S /D +2021/8/25 /C "cmd /c echo @path,@fdate @ftime,@fsize" > result.csv
REM csvファイルをExcelで開いてデータ加工
【参考サイト】
◆Windowsのforfilesコマンドで条件に合うファイルを取り出して処理する
https://atmarkit.itmedia.co.jp/ait/articles/0902/27/news132.html
◆Windowsで容量の大きいファイル&ディレクトリを調べる
https://orebibou.com/ja/home/201501/20150113_001/
◆【Windows】forfilesコマンドで指定サイズ以上のファイル一覧を取得する
https://moripro.net/windows-forfiles-get-filepath/#forfiles
曜日チェック
REM weekday.vbs
WScript.Quit(WeekDay(Date)+1)
REM == 曜日の取得 ============
cscript /b weekday.vbs
if %errorlevel%==8 set WDAY=Sat
if %errorlevel%==7 set WDAY=Fri
if %errorlevel%==6 set WDAY=Thu
if %errorlevel%==5 set WDAY=Wed
if %errorlevel%==4 set WDAY=Tue
if %errorlevel%==3 set WDAY=Mon
if %errorlevel%==2 set WDAY=Sun
if %errorlevel%==1 set WDAY=ERROR
REM ==========================
【参考サイト】
◆VBSCRIPTを実行BATファイルに含める方法
https://qiita.com/fusafusa/items/71dfae83910fb3de2aa3
◆BATとWSHのコードを1ファイルに混在させるためのshebang記法(複雑なバッチを1ファイルで実現)
https://computer-technology.hateblo.jp/entry/20131025/p1
削除
REM 更新日時が新しい2つ(skip=2)以外のディレクトリ削除
for /f "skip=2" %%A in ('dir /AD /O-D /B') do RD /S /Q %%A
REM 指定した名前のディレクトリを再帰的に削除
REM for /R %%d in (フォルダ名) do RD /S /Q "%%d"
for /R %d in (.git) do RD /S /Q "%d"
REM ※バッチ処理の場合、変数はコマンドライン引数と区別するために%%Aのように%を2つ続けて記載
設定ファイル操作
[IPアドレス]
IPADDRESS=10.20.30.40
[タイトル]
TITLE=タイトル
[ファイルパス]
FILE_PATH=C:\Users\wakasama\Desktop\text.txt
for /f "tokens=1,* delims==" %%a in (config.ini) do (
set %%a=%%b
)
echo %IPADDRESS%
echo %TITLE%
echo %FILE_PATH%
C:\wakasama\Program
C:\wakasama\iso
REM バックアップ対象フォルダ読込
for /f %%a in (targetFolder.txt) do (
rem 出力
echo %%a
)
ファイル情報表示
※オプション駆使すれば色々できそうだが...とりあえず下記で十分
dir C:\Users\wakasama\Desktop D:\test.ps1 | findstr "png ps1"
日時操作
◆バッチファイルでの日付取得(地域設定に依存しない)
https://qiita.com/minorufujimoto/items/78f9da9fbff69d304cf4
※まさに探していたもの、簡単に実装できた
for /f %%a in ('wmic os get LocalDateTime ^| findstr \.') DO set LDT=%%a
set CUR_DATE=%LDT:~0,12%
色々...後で整理
REM .bat(バッチファイル)のifコマンド解説。
REM http://qiita.com/sawa_tsuka/items/8edf3d3d33a0ae86cb5c
REM x86/x64分岐
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
REM ★☆★x86の結果は要確認!!
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
echo 32bit process on 64bit OS - WOW64
) else (
REM IA64等の可能性有!!
echo 32bit process on 32bit OS
)
) else (
echo 64bit process on 64bit OS
)
REM バッチ実行時の引数(%1~%9で取得可)
REM ディレクトリ/ファイル削除系
REM ★☆★既知のネタ要収集!!
REM ================================================================= Reminder
REM ※CドライブのJPEGデータを検索しDドライブにコピーする場合
REM for /f %%A in ('dir /b /s c:\*.jpg') do copy "%%A" d:\
REM -------------------------------
REM @ECHO OFF
REM
REM SET keyword=bbb
REM
REM REM 文字列検索
REM FINDSTR %keyword% sample.txt > NUL
REM GOTO answer%ERRORLEVEL%
REM GOTO :EOF
REM
REM :answer0
REM REM 検索文字列ありの場合
REM ECHO %keyword%あり
REM GOTO :EOF
REM
REM :answer1
REM REM 検索文字列無しの場合 or エラーが発生した場合
REM ECHO %keyword%なし
REM GOTO :EOF
REM -------------------------------
REM @echo off
REM
REM REM 拡張子「.txt」のファイル名一覧を取得(サブディレクトリの中も再帰的に取得)
REM for /f "usebackq" %%i in (`dir /B /S *.txt`) do (
REM
REM REM ファイル名出力(改行割愛+区切り文字挿入)
REM SET /P<NUL=%%i:
REM
REM REM 行数出力
REM type %%i | find /C /V ""
REM )
REM
REM REM 動作確認用
REM pause
REM @Echo Off
REM ::----------------------------------------
REM :: 検索先フォルダ
REM Set SrcFolder="C:\"
REM ::----------------------------------------
REM :: 格納先フォルダ
REM Set DstFolder="E:\bbb\"
REM
REM For /F "delims=" %%f IN ( E:\list.txt ) DO Call :MoveToMyFolder "%%f"
REM Exit /B
REM
REM ::----------------------------------------
REM :: ファイルを探して移動
REM ::----------------------------------------
REM :MoveToMyFolder
REM CD /D %SrcFolder%
REM Echo %1 を検索します。
REM For /F "delims=" %%f IN ('dir /S /B %1') DO (
REM Echo "%%f" を移動します。
REM Move "%%f" %DstFolder% )
REM Exit /B
置換
echo off
set tikan1=りんご
set tikan2=みかん
echo 置換開始
setlocal enabledelayedexpansion
for /f "delims=" %%A in (C:\copy_base\hoge.txt) do (
set line0=%%A
set line1=!line0:copy_base1=%tikan1%!
set line2=!line1:copy_base2=%tikan2%!
echo !line2!>>C:\after\hoge.txt
)
endlocal
echo 置換完了
pause
配列
REM カンマ区切りのデータを表示
@echo off
set color=red,blue,green,yellow,pink
for %%a in (%color%) do (
echo %%a
)
CSVファイルを先頭行のみ残すよう加工
REM 事前準備
RD /S /Q D:\Batch\test
MD D:\Batch\test
XCOPY D:\Batch\work\test D:\Batch\test /E /H /Y
PUSHD D:\Batch\test
REM 特定ディレクトリ配下のCSVファイルのBOM削除
FOR /f "usebackq tokens=*" %%i in (`dir /B /S *.csv`) do (
powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { $MyPath = '%%i';$MyFile = Get-Content $MyPath; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False);[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)}"
)
REM 特定ディレクトリ配下のCSVファイルでループ
FOR /f "usebackq tokens=*" %%j in (`dir /B /S *.csv`) do (
SET /P<NUL=%%j:
CALL :cutOneLine "%%j"
)
POPD
EXIT /B
REM ファイル加工(1行目のみ残す)
:cutOneLine
FOR /f "usebackq tokens=*" %%a in (%1) do (
SET HEAD=%%a
GOTO :exit_for
)
:exit_for
echo %HEAD% > %1
@REM ◆バッチファイル | テキストファイルを 1 行ずつ読み込む (完全版?)
@REM https://archive.kerupani129.net/blog/posts/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92-1-%E8%A1%8C%E3%81%9A%E3%81%A4%E8%AA%AD%E3%81%BF/
[参考サイト]
◆windowsの.batバッチファイルで文字列を置換する
https://qiita.com/wagase/items/2180d8911dcc2a748fd3
※まさに探していたもの、簡単に実装できた(文字コードのケアまでしてました...助かる)
◆知識ゼロからのwindowsバッチファイル超入門
https://jj-blues.com/cms/
規模測定(CLOC)
REM ------------------------------------------------------------------------
REM 環境変数
set CLOCPATH=D:\Angular\cloc-1.80.exe
set WORKPATH=D:\Angular
REM gitからコード取得
REM git clone -b ブランチ名 https://リポジトリのアドレス
REM 規模測定
%CLOCPATH% --skip-uniqueness %WORKPATH%\my-app\src %WORKPATH%\my-app2\src > clientResult.txt
%CLOCPATH% --skip-uniqueness %WORKPATH%\my-app3\src > clientResult2.txt
REM 参考サイト
REM https://github.com/AlDanial/cloc
REM デバッグ用
REM %CLOCPATH% --by-file --skip-uniqueness %WORKPATH%\my-app\src %WORKPATH%\my-app2\src %WORKPATH%\my-app3\src
type clientResult.txt clientResult2.txt | findstr SUM: > codeSum.txt
REM codeSum.txtからスペースまで2列目(filesの合計)をaに格納,5列目(codeの合計)をbに格納
REM 遅延環境変数定義をすることで、CODEDATAに累積データが作成される
setlocal enabledelayedexpansion
set CODEDATA=
for /f "tokens=2,5 delims= " %%a in (codeSum.txt) do (
set CODEDATA=%%a,%%b,!CODEDATA!
)
echo !CODEDATA! > codeCount.csv
REM ------------------------------------------------------------------------
7Zip関連
圧縮
C:\tools\7-zip\7za.exe a < ZIP名 > < 圧縮したいフォルダorファイル >
a:圧縮コマンド(フォルダ構成反映)
< ZIP名 >:指定したフォルダを圧縮した際の名前
< 圧縮したいフォルダorファイル >:圧縮したいフォルダorファイル名
解凍
C:\tools\7-zip\7za.exe e -y -o< 出力先パス > -ir!< 取り出したいファイル名 > < ZIP名 >
e:解凍コマンド(フォルダ構成反映なし)
-y:Yes/Noは全部Yes
-o:このオプションに続けてスペースを空けずに<出力先パス>記入
< ZIP名 >:フォルダごと圧縮したZIPファイルを指定
さくらエディタ関連
クリッカブルURL
/(\b[a-zA-Z]:\|\B\\)[\w-.\/$%~][^"\r\n]/k
/(\b[a-zA-Z]:\|\B\\|\bfile://)[\w-.\/$%~][^"\r\n]/k
##さくらエディタ検索/置換
REM ------------------------------------------------------------------------
REM 環境変数 ※環境に応じて要変更
SET SAKURAPATH="C:\Program Files (x86)\sakura\sakura.exe"
REM Grepに関するオプション(-GREPMODE と同時に指定します)
REM -GREPMODE Grep実行モードで起動
REM -GKEY= Grepの検索条件
REM "'で囲む。条件中の'"'は二つの連続した'"'にする
REM (例) -GKEY="printf(" 「printf(」を検索
REM (例) -GKEY="printf( ""%s" 「printf( "%s」を検索
SET SAKURAGKEY=-GKEY="wakasama"
REM -GREPR= Grepの置換文字列 (sakura:2.2.0.0以降)
REM これを指定すると置換になる
REM '"'で囲む。条件中の'"'は二つの連続した'"'にする
REM -GFILE= Grepの検索対象のファイル
REM '"'で囲む。条件中の'"'は二つの連続した'"'にする
SET SAKURAGFILE=-GFILE="*.txt"
REM -GFOLDER= Grepの検索対象のフォルダ
REM '"'で囲む。条件中の'"'は二つの連続した'"'にする
SET SAKURAGFOLDER=-GFOLDER="D:\Share"
REM -GREPDLG サクラエディタが起動すると同時にGrepダイアログを表示します。
REM -GCODE= Grepでの文字コードを指定します。
REM (未指定,0=SJIS、1=JIS、2=EUC、3=Unicode、4=UTF-8、99=自動選択)
SET SAKURAGCODE=-GCODE=99
REM -CODEと同じように数字で指定します。
REM -GOPT= [S][L][R][P][W][1|2|3][K][F][B][G][X][C][O][U][H]
REM -GOPTのオプション
REM S サブフォルダからも検索
REM L 大文字と小文字を区別
REM R 正規表現
REM P 該当行を出力/未指定時は該当部分だけ出力
REM W 単語単位で探す
REM 1|2|3 結果出力形式。1か2か3のどれかを指定します。
REM (1=ノーマル、2=ファイル毎、3=結果のみ)
REM K -GCODE=99と同じ意味です。互換性のためだけに残されています。
REM F ファイル毎最初のみ
REM B ベースフォルダ表示
REM G フォルダ毎に表示
REM X Grep実行後カレントディレクトリを移動しない
REM C (置換)クリップボードから貼り付け (sakura:2.2.0.0以降)
REM 0 (置換)バックアップ作成 (sakura:2.2.0.0以降)
REM U 標準出力に出力し、Grep画面にデータを表示しない
REM コマンドラインからパイプやリダイレクトを指定することで結果を利用できます。(sakura:2.2.0.0以降)
REM H ヘッダ・フッタを出力しない(sakura:2.2.0.0以降)
SET SAKURAGOPT="-GOPT=SPU"
REM 検索
%SAKURAPATH% -GREPMODE %SAKURAGKEY% %SAKURAGFILE% %SAKURAGFOLDER% %SAKURAGCODE% %SAKURAGOPT% > result.txt
REM 置換
REM SET SAKURAGFOLDER=-GFOLDER="D:\Share\CmdSearch\test"
REM SET SAKURAGKEY=-GKEY="葛飾区"
REM SET SAKURAGREPR=-GREPR="品川区"
REM SET SAKURAGOPT="-GOPT=SPOU"
%SAKURAPATH% -GREPMODE %SAKURAGKEY% %SAKURAGREPR% %SAKURAGFILE% %SAKURAGFOLDER% %SAKURAGCODE% %SAKURAGOPT% > result.txt
REM ------------------------------------------------------------------------
Oracle関連
※参考サイト
◆バッチシェルからSQLを実行して終了コードを返す
https://qiita.com/kariyaitaru/items/e3c064786a90d2964069