打开其他程序正在使用的文件

时间:2017-06-30 17:40:16

标签: powershell batch-file

我试图通过插入bat文件中的powershell代码访问由另一个程序创建的日志文件,但它给了我以下错误(西班牙语环境):

  

Excepci¢al llamar a“OpenRead”con los argumentos“1”:“El proceso   没有puede obtener acceso al archivo   'C:\ Users \ g \ Documents \ BAT \ GrabI.log'polque est siendo utilizado en   otro proceso。

英文:

  

使用“1”参数调用“OpenRead”的异常:“进程不能   访问文件'C:\ Users \ g \ Documents \ BAT \ GrabI.log',因为它是   被另一个进程使用。“

powershell代码是:

@PowerShell  ^
    $N = 200; ^
    $fpath = 'Grab%1.log';  ^
    $fs = [System.IO.File]::OpenRead($fpath);  ^
    $fs.Seek(-$N, 'End') ^| Out-Null;  ^
    $mystr = '';  ^
    for ($i = 0; $i -lt $N; $i++)  ^
    {  ^
        $mystr = ($mystr) + ([char[]]($fs.ReadByte()));  ^
    }  ^
    Write-Host $mystr > logtmp%1.log
%End PowerShell%

有没有办法打开允许我以读取模式访问文件,即使它正在使用?

2 个答案:

答案 0 :(得分:0)

我想我找到了解决问题的方法。我没有打开文件,而是使用了Get-Content函数。像这样:

@PowerShell  ^
    $N = 200; ^
    $mystr = Get-Content 'Grab%1.log' ^| Select-Object -last 1;  ^
    Write-Host $mystr.substring($mystr.length-$N,$N) > logtmp%1.log
%End PowerShell%

现在我没有任何问题。

答案 1 :(得分:0)

当文件很大时,最好使用参数 -tail 10

Get-Content $fpath -tail $N