Powershell 打开其他程序正在使用的文件
我正试图通过插入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 打开其他程序正在使用的文件,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”
@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的第一个字符,但是当日志没有到达它们时,我没有问题。我认为,如果我能键入该文件,就意味着其他程序没有以“独占”方式打开该文件。我错了吗?谢谢,索达维洛。我已经阅读了您的链接中的内容,并尝试了其中的一些建议,但目前我还没有解决我的问题。使用命令(资源包)可以帮助您。注意:需要重新启动。