Home New Help Edit

バッチファイル(BAT)とかWSLとか含むbash


WSL含めたらなんでもありになってきた

2008年3月22日
Suns & Moon Laboratory

日付でバックアップ

set dt=%date% set dtstr=%dt:~-10,4%%dt:~-5,2%%dt:~-2,2% set fname=cad_backup_%dtstr%.7z md %dtstr% cd %dtstr% 7za a %fname% E:\home\users\ECAD\s_mon\PA272W

変数

set ver=101 echo %ver%
とかすると以下の表示
101

EXIST

@echo off REM REM REM IF EXIST FLD1 GOTO EXITS_FLD1 IF NOT EXIST FLD1 GOTO NOT_EXITS_FLD1 ECHO ここに来る事は、ほぼありえない。 EXIT /b :EXITS_FLD1 ECHO found FLD1 EXIT /b :NOT_EXITS_FLD1 ECHO not found FLD1 EXIT /b

演算

@echo off set /a ans=%1-1 echo %ans%

forでファイル処理

引数から
for /F %%i in (%1) do ( @echo %%i )
dirで列挙
for /F %%i in ('dir /b *.jpg') do ( @echo %%i )
ファイルに書いたリストを処理
FOR /F %%I IN (version.txt) DO ( ren MAIN.BIN MAIN_%%I.BIN )
version.txt
12345
実行結果
MAIN_12345.BIN

forで時間待ち

@echo off @echo wait sometime for /L %%A in (30,-1,0) do ( ping localhost -n 2 > null @echo %%A )

現在のディレクトリ名だけを取得


c:\temp\dat にいるとき、datを返す

set DIRECTORY_PATH=%~dp0 for %%i in ("%DIRECTORY_PATH:~0,-1%") do set THIS_DIRECTORY=%%~ni

バッチファイルがあるディレクトリ名だけを取得する

引数変換

拡張子変更

@echo off for %%f in (%*) do ( CALL :GEN_TXT %%f ) goto :END :GEN_TXT set TXT=%~n1.txt bin_to_txt i=%1 f=2 s=1 > %TXT% goto :EOF :END
バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法

for /?
の最後に色々説明あり

起動時ネットワークドライブ再接続

ドライブとか、サーバーとか、password,usernameは任意に設定する。

@echo off REM ======================================================== REM ネットワークドライブ接続 REM ======================================================== REM REM 起動時50秒待つ REM @echo wait 50sec for /L %%A in (50,-1,0) do ( ping localhost -n 2 > null @echo %%A ) REM REM 接続のループ REM 接続に失敗した場合、10秒待ってから再度接続を行う REM :TRY_CONNECT @echo try connect REM 10秒待つ for /L %%A in (10,-1,0) do ( ping localhost -n 2 > null @echo %%A ) REM 接続 @echo connect E: drive net use E: \\server\path password /USER:username /PERSISTENT:NO REM 既に接続済みの場合は終了する if ERRORLEVEL 2 goto END REM エラーの場合はループ() if ERRORLEVEL 1 goto TRY_CONNECT :END

7zipを使う


準備

pathを通しておく
C:\Program Files\7-Zip

圧縮

拡張子をzipにすれば、zipで圧縮してくれる。
7z a test.7z *
除外
除外は先に指定する
xが除外,rがサブディレクトリ(リカーシブ),!がワイルドカード
SET VER=003 7z a sample_source_ver%VER%.zip -xr!*.su -xr!*.d -xr!*.o sample_source

解凍

7z x test.7z

Word,Excelを比較


xdoc2txtを使う

バッチファイルはこんな風に
@echo off xdoc2txt %1 > %1.xdoc2txt.tmp xdoc2txt %2 > %2.xdoc2txt.tmp diff %1.xdoc2txt.tmp %2.xdoc2txt.tmp del %1.xdoc2txt.tmp del %2.xdoc2txt.tmp

シンボリックリンク

C:\Program Files (x86)\EAGLE-5.11.0>mklink /d projects c:\usr\test\projects
参考:Windows Vista/Windows Server 2008でシンボリック・リンクを作成する − @IT

DIR

隠しファイル等も表示する
dir /a
サブディレクトリも表示する
dir /s

GOTO


GOTO :L1 L1:

便利なコマンド(別途インストール必要、WSLならインストール不要)


WSL sed

テキストファイルの文字列置換や行削除 sed覚え書き
sed s/検索/置換/g filename

WSL split

テキストファイルを行単位に分割
split --lines=NUMBER filename

WSLでエクスプローラー開いているフォルダでbash起動

パス名表示しているところに、bash入力してEnter

WSL find

現在フォルダ以下の*.cファイル列挙
find ./ *.c

WSL grep

bash

カレントディレクトリ以下の、*.cファイルに対してxxxxを捜す
find ./ -name *.c | xargs grep -n xxxxx
さらにヘッダも含める
find ./ -name *.c -or -name *.h | xargs grep -n xxxxx

bash 引数

echo "script=" $0 #スクリプト名 echo "count=" $# #引数の個数 echo "No.1=" $1 #1つ目の引数 echo "No.2=" $2 #2つ目の引数 echo "all=" $@ #全ての引数
https://atmarkit.itmedia.co.jp/ait/articles/1810/07/news001.html

bash if分岐

SHOW_HELP="0" if [ $# = 0 ] then SHOW_HELP="1" elif [ $1 = "xyz" ] then else fi if [ $SHOW_HELP = "1" ] exit 1 fi

リンク

とほほのバッチ入門
バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法


end.

Home New Help Edit
2024-08-14 11:00:22 32400