バッチファイル(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.
2024-08-14 11:00:22 32400