Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 打开其他程序正在使用的文件_Powershell_Batch File - Fatal编程技术网

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

Powershell 打开其他程序正在使用的文件,powershell,batch-file,Powershell,Batch File,我正试图通过插入bat文件中的powershell代码访问由另一个程序创建的日志文件,但它给了我以下错误(西班牙语环境): 除了“公开阅读”的辩论“1”:“El proceso” 无需任何额外费用 'C:\Users\g\Documents\BAT\GrabI.log'porque est siendo utilizado en 奥特罗·普罗切索 英文: 使用“1”参数调用“OpenRead”时出现异常:“进程无法 访问文件“C:\Users\g\Documents\BAT\GrabI.log”

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

除了“公开阅读”的辩论“1”:“El proceso” 无需任何额外费用 'C:\Users\g\Documents\BAT\GrabI.log'porque est siendo utilizado en 奥特罗·普罗切索

英文:

使用“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%

是否有任何方法可以打开该文件,即使该文件正在使用,也可以以读取模式访问该文件?

我想我已经找到了解决问题的方法。我没有打开该文件,而是使用了“获取内容”功能。类似这样的功能:

@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%

现在我没有任何问题。

我想我已经找到了解决问题的方法。我没有打开文件,而是使用了“获取内容”功能。类似如下:

@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%

现在我没有任何问题。

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

Get-Content $fpath -tail $N

如果文件很大,最好使用参数-tail 10

Get-Content $fpath -tail $N

您好,也许您可以找到一个解决方案。如果另一个程序以“独占”方式打开文件,则不会。谢谢,Bill_Stewart,我正在尝试powershell从日志中捕获最后200个字符,因为当我尝试使用“类型抓取%1.log |查找”写入“在bat文件中,我只能从日志中读取4096的第一个字符,但虽然日志没有到达它们,但我没有问题。我认为,如果我能键入该文件,就意味着其他程序没有以“独占”方式打开该文件。我错了吗?谢谢,索达维洛。我已经阅读了您的链接中的内容,并尝试了其中的一些建议,但目前我还没有解决我的问题。使用
命令
(资源包)可以帮助您。注意:需要重新启动。您好,也许您可以找到解决方案。如果其他程序将文件打开为“独占”,则不会。谢谢,Bill_Stewart,我正在尝试powershell从日志中捕获最后200个字符,因为当我尝试使用“type Grab%1.log | find“writing”时在bat文件中,我只能从日志中读取4096的第一个字符,但是当日志没有到达它们时,我没有问题。我认为,如果我能键入该文件,就意味着其他程序没有以“独占”方式打开该文件。我错了吗?谢谢,索达维洛。我已经阅读了您的链接中的内容,并尝试了其中的一些建议,但目前我还没有解决我的问题。使用
命令
(资源包)可以帮助您。注意:需要重新启动。