2016-01-26 3 views
0

Я пытаюсь получить последнюю измененную дату файла журнала на удаленном сервере Windows 2008/2012 с пакетным скриптом. Я подключаюсь к машине, используя «сетевое использование» и умею видеть, существует ли файл.Как получить измененное время удаленного файла в пакетном скрипте

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" - или даже предоставить путь к параметру P для файлов, но он не находит файл.

Есть ли простой способ получить измененную дату/время удаленного файла? Кроме того, мне интересно, есть ли способ удержать последние n строк одного и того же файла с помощью встроенной команды Windows.

Любая помощь приветствуется! Спасибо!

ответ

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 

другой вопрос, вы sneeked в

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 

Cut

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" 
Смежные вопросы