如何在批处理脚本中获取远程文件的修改时间

时间:2016-01-26 21:52:06

标签: windows batch-file

我正在尝试使用批处理脚本在远程Windows服务器2008/2012上获取日志文件的上次修改日期。 我使用" net use"连接到机器,并能够查看文件是否存在。

net use \\X.X.X.X /user:%USERNAME% %PASSWORD%
if exist "\\X.X.X.X\\C$\\Temp\\LogFiles\\abcd" (
    echo ABCD file exists on the server
) else (
    echo ABCD file does NOT exist on the server
)

此外,我可以使用forfiles获取本地文件的最后更新时间:

for /f "delims=" %%i in ('"forfiles /m MyLocalAbcd /c "cmd /c echo @file was last modified at @ftime" "') do set modif_time=%%i
echo %modif_time%

但是,我无法获得远程文件的修改时间。我试图提供完整的路径 - forfiles / M" \ X.X.X.X \ C $ \ Temp \ LogFiles \ abcd" - 或者甚至提供forfiles选项P的路径,但它找不到文件。

是否有一种简单的方法来获取远程文件的修改日期/时间? 另外,我想知道是否有办法使用Windows内置命令来拖尾同一文件的最后n行。

任何帮助表示赞赏! 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试dir

或者以不同方式使用for循环。

for %%A in (\\server\C$\Temp\LogFiles\abcd) do echo %%~tA

粘贴到命令提示符中的工作示例。

for %A in (\\127.0.0.1\C$\windows\win.ini) do echo %~tA

对于你偷偷摸摸的另一个问题

more +50跳过前50行。

这个VBScript做你想要的。

Set Arg = WScript.Arguments
Set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Set rs = CreateObject("ADODB.Recordset")
With rs
    .Fields.Append "LineNumber", 4 

    .Fields.Append "Txt", 201, 5000 
    .Open
    LineCount = 0
    Do Until Inp.AtEndOfStream
        LineCount = LineCount + 1
        .AddNew
        .Fields("LineNumber").value = LineCount
        .Fields("Txt").value = Inp.readline
        .UpDate
    Loop

    .Sort = "LineNumber ASC"

    If LCase(Arg(1)) = "t" then
        If LCase(Arg(2)) = "i" then
            .filter = "LineNumber < " & LCase(Arg(3)) + 1
        ElseIf LCase(Arg(2)) = "x" then
            .filter = "LineNumber > " & LCase(Arg(3))
        End If
    ElseIf LCase(Arg(1)) = "b" then
        If LCase(Arg(2)) = "i" then
            .filter = "LineNumber > " & LineCount - LCase(Arg(3))
        ElseIf LCase(Arg(2)) = "x" then
            .filter = "LineNumber < " & LineCount - LCase(Arg(3)) + 1
        End If
    End If

    Do While not .EOF
        Outp.writeline .Fields("Txt").Value

        .MoveNext
    Loop
End With

使用

仅对标准输入和标准输出进行读写。这些仅在命令提示符中可用。

filter <inputfile >outputfile
filter <inputfile | other_command
other_command | filter >outputfile
other_command | filter | other_command

<强>剪切

filter cut {t|b} {i|x} NumOfLines

从文件的顶部或底部剪切行数。

t - top of the file
b - bottom of the file
i - include n lines
x - exclude n lines

示例

filter cut t i 5 < "%systemroot%\win.ini"