2014年1月19日日曜日

@echo off

set WKF=_work.txt

dir /s /a-d /w . | findstr "個の" > %WKF%

for /f "usebackq tokens=3" %%A in (`
find /c /v "" %WKF%
`) do set /a LC=%%A - 2

for /f "skip=%LC% tokens=1,2,3" %%A in (
%WKF%
) do call :SUB1 "%%A" "%%C"

del %WKF%

echo ファイル = %NUMF1%
echo 使用量 = %NUM1%

goto :EOF


:SUB1
set NUMF=%~1
set NUMF1=%NUMF2%
set NUMF2=%NUMF%
set NUM=%~2
set NUM1=%NUM2%
set NUM2=%NUM%


■test2.bat
test2.bat test\test.txt
とすることによってファイル内の文字を行毎に表示する。
また、デスクトップにショ-トカットを置き、
そこへファイルをドロップすることによっても同様の結果を得る。
@echo off
echo ------START------
for %%V in (%1) do (
type %%V
)
echo ------END--------
pause

■連結
@echo off
set ZIP_FILE_LIST=zip_file_list.txt
echo ------START------
echo %~a1 | find "d">NUL
if %ERRORLEVEL% EQU 0 (
dir /B /O %1\*.zip.0>%1\%ZIP_FILE_LIST%
) else (
echo 複数に分割された集約ファイルの格納されているディレクトリを指定してください。
goto END
)

for /F "delims=" %%i in (%1\%ZIP_FILE_LIST%) do (
echo %%~niファイルへと連結しました。
)

del %1\%ZIP_FILE_LIST%

:END

echo ------END--------
pause

■WSH

vt1.vbs
Wscript.Echo "メッセージを表示します"

コマンドプロンプトから
cscript vt1.vbs //nologo

http://www.atmarkit.co.jp/ait/articles/0401/15/news084_2.html

■WSHリファレンス
http://msdn.microsoft.com/ja-jp/library/cc364460.aspx



■if /A == /%EV% ( echo EV=A ) else echo EV != A
とすると、環境変数EVの値が“A”のときには、“echo EV=A”が実行され、
そうでないとき(未定義の場合も含む)は、else以降のコマンドが実行される。
ここで、条件部分の左右の辺の先頭に“/”が含まれているが、
これは、EVが未定義のときの対策である。
今回はスラッシュを使ったが、実際には、ほかの文字でもかまわない。
“==”の両辺の式をダブルクオート(“ ”)で囲むスタイルを使う人もいる
(C言語などの文字列のスタイルにならっている)。



基本的には、usebackqを必ず指定することにして、ファイル名は必要に応じてダブルクォート記号で囲み、コマンドならばバッククォート、文字列ならシングルクォート記号で囲む


記号 なし ダブルクォート シングルクォート バッククォート
usebackqなし ファイル名 文字列 コマンド バッククォート記号を含むファイル名
usebackqあり ファイル名 ファイル名 文字列 コマンド
usebackqコマンドとファイル・セット指定の関係

for /F "usebackq delims=" %%i in ("%~1\%ZIP_FILE_LIST%") do (
echo %%~niファイルへと連結しました。
)

■指定フォルダのアレやアレで始まるファイルのリストを作成する

@echo off

set DIR_PATH=%~dp1
echo %DIR_PATH%

set WKF=__work.txt

dir /b /a-d "%DIR_PATH%%~1" | findstr /B "q." > %DIR_PATH%%WKF%
dir /b /a-d "%DIR_PATH%%~1" | findstr /B "w." >> %DIR_PATH%%WKF%

或いは、空白で繋げる

dir /b /a-d "%DIR_PATH%%~1" | findstr /B "q. w." > %DIR_PATH%%WKF%

rem del


■指定フォルダの下を全て取得する為にリストを作るが、特定フォルダ下のみ外す
外すディレクトリを"tes t"だとすると、

dir /s /b /a-d . | findstr /V /C:"tes t"


■指定フォルダの下を取得するにあたり、特定フォルダ下を除外する、というリストを作成
@echo off

set TARGET_PATH="C:\usr\command\tes t\trr"

echo %TARGET_PATH%

set DIR_PATH=%~dp1
echo %DIR_PATH%

set WKF=__work.txt

echo "%~f1"

echo ---
dir /s /b /a-d "%~f1"
echo ---

dir /s /b /a-d "%DIR_PATH%" | findstr /IV /C:%TARGET_PATH%

※ディレクトリを指定する際、最後に\を付けなければならない。

■指定フォルダが、特定フォルダ下に存在しないことの確認
@echo off

set TARGET_PATH="C:\usr\command\tes t"
set DIR_PATH=%~dp1
set WKF=__work.txt

dir /s /b /a-d "%DIR_PATH%" | findstr /I /C:%TARGET_PATH% > %WKF%
call :size_check %WKF%
if %WORK_FILE_SIZE% EQU 0 goto file_not_find
echo 取得処理を行う

:file_not_find
goto :EOF

:size_check
set WORK_FILE_SIZE=%~z1
goto :EOF


0 件のコメント:

コメントを投稿