@rem http://computer-technology.hateblo.jp/entry/20131025/p1
setlocal
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@rem setlocal DISABLEDELAYEDEXPANSION
@rem 説明:
@rem 与えられたファイルそれぞれの末尾の部分を表示します。ファイルの内容がどんどん増えて続けているものと仮定し、ファイルの最終部分の文字を読み続けようと無限にループします。
@rem Usage:
@rem tail-f.js.bat filepath
@rem ####################
@rem Batch.
@rem ####################
@rem ....................
@rem Batch main.
@rem ....................
set rv=11
if "%~1"=="" ( call :L_call_BAT_NoArgs
) else ( call :L_call_BAT_UnixTailF %*
)
@rem ....................
@rem Exit.
@rem ....................
@rem echo.
@rem pause
@rem echo 終了するには何かキーを押してください . . .
@rem pause>nul
exit /b !rv!
goto :eof
@rem ....................
@rem No args.
@rem ....................
:L_call_BAT_NoArgs
@rem echo BAT %0 %* ....................
call :L_call_JS
set /a rv=!errorlevel!+0
goto :eof
@rem ....................
@rem Unix tail -f.
@rem ....................
:L_call_BAT_UnixTailF
@rem echo BAT %0 %* ....................
call :L_call_JS %*
set /a rv=!errorlevel!+0
goto :eof
@rem ....................
@rem Call JScript.
@rem ....................
:L_call_JS
@rem echo BAT %0 %* ....................
set "jsargs=%*"
if "!jsargs!"=="" (
cscript.exe //nologo //e:JScript "%~f0"
) else (
cscript.exe //nologo //e:JScript "%~f0" !jsargs!
)
@rem call :L_echoErrorLevel
goto :eof
@end
// ####################
// JScript.
// ####################
// ....................
// No args.
// ....................
function NoArgs() {
// WScript.Echo("JS NoArgs ....................");
// WScript.Echo("JS Argc=" + WScript.Arguments.length + ".");
WScript.Echo("Usage: tail-f.js.bat filepath");
return 1;
}
// ....................
// Unix tail -f.
// ....................
function UnixTailF(jsargs) {
// WScript.Echo("JS UnixTailF ....................");
// http://www.gadgety.net/shin/tips/win/tail.html
//
// tail.js - "tail -f" for windows
//
// Usage: cscript tail.js filename
//
if (WScript.Arguments.length == 0) {
WScript.Echo("Usage: cscript tail.js filename");
WScript.Quit(1);
}
var path = WScript.Arguments(0);
var fso = WScript.CreateObject("Scripting.FileSystemObject");
if (!fso.fileExists(path)) {
fso = null;
WScript.Echo("file not found");
WScript.Quit(1);
}
var ts = fso.OpenTextFile(path,1,false);
var size = fso.GetFile(path).Size;
ts.Skip(size);
try {
while(true) {
WScript.Sleep(1000);
while(!ts.AtEndOfStream) {
WScript.Echo(ts.ReadLine());
}
}
} catch(e) {
} finally {
ts = null;
fso = null;
}
return 0;
}
// --------------------
// JScript main.
// --------------------
var rv = 0;
if (WScript.Arguments.length == 0) {
rv = rv + NoArgs();
} else {
var args = new Array();
for (var idx = 0; idx < WScript.Arguments.length; ++idx) {
args[idx] = WScript.Arguments(idx);
}
var ary = new Array();
ary = args.slice(0, args.length);
if (0 == 1) {
rv = rv + NoArgs();
} else {
rv = rv + UnixTailF(ary);
}
}
WScript.quit(rv);