gpt4 book ai didi

file - 批处理 - 有没有办法批量同步锁定txt文件?

转载 作者:行者123 更新时间:2023-12-03 04:49:43 27 4
gpt4 key购买 nike

我需要创建一个批处理文件,使用tracert命令跟踪一些IP,并将跟踪写入txt文件。我希望它很快,所以我想为每个跟踪启动一个新命令,以使所有跟踪请求立即启动。

这是我的 ping.bat:

@echo off
set saveUnrechableLocation=..\pingUnreachableInfo\pingUnrechableInfoDB.txt
set IpListLocation=..\ipInfo\all_DB_ip.txt
set reachableLocation=..\pingRechableInfo\RechableIp\pingRechableInfoDB.txt
set trace=..\pingRechableInfo\tracert\tracertDB.txt
set numberOfPings=1
@echo pinging DB > %saveUnrechableLocation%
copy /y NUL %reachableLocation% > NUL
copy /y NUL %trace% > NUL
for /F "tokens=*" %%A in (%IpListLocation%) do (
ping -n %numberOfPings% %%A | find "TTL=" >nul
if errorlevel %numberOfPings% (
@echo %%A not rechable >> %saveUnrechableLocation%
)
if not errorlevel %numberOfPings% (
@echo %%A >> %reachableLocation%
start trace.bat %trace% %%A
)
)

trace.bat 看起来像这样:

@echo off
set saveLocation=%~1
set ip=%~2
tracert %ip% >> %saveLocation%
exit

问题是,当我尝试使用它时,我遇到了这个问题:

the process cannot access the file because it is being used by another process

我可以做什么来解决这个问题?谢谢!

最佳答案

Windows 重定向不允许多个进程同时打开同一文件进行写访问。写操作必须串行化。这可以通过批处理来完成,如 https://stackoverflow.com/a/9344547/1012053 所示。 。但是,我认为该解决方案对您的情况没有帮助。

每个tracert进程都需要相当长的时间,并且必须在整个过程中重定向输出。但是您希望多个进程同时运行,所有输出都重定向到同一个文件。即使您要让它工作,输出也会交错,您将无法弄清楚这一切意味着什么。

我建议将每个tracert 输出重定向到一个唯一的文件。您可以将 IP 地址合并到输出文件名中,您可以使用我展示的技术在每个进程完成后合并文件。

请注意,无需传递输出位置。每个子进程都可以访问跟踪变量,因此可以轻松重定向到正确的位置。

ping.bat 更改概要

...
set trace=..\pingRechableInfo\tracert\tracertDB
...
start trace.bat %%A
...

修改trace.bat

@echo off
tracert %1 >%trace%_%1.txt %= Redirect TRACERT to unique temp file =%
:merge
2>nul ( %= Hide error messages inside the outer parentheses =%
>>%trace%.txt ( %= Attempt stdout redirection - Fails if already locked =%
type %trace%_%1.txt %= Write the temp file to the merge file =%
(call ) %= Clear any error that TYPE may have generated =%
)
) || goto :merge %= Loop back and try again if stdout redirection failed =%
del %trace%_%1.txt %= Delete the temporary file =%
exit

没有注释的缩写形式可能如下所示:

@echo off
tracert %1 >%trace%_%1.txt
:merge
2>nul (>>%trace%.txt (type %trace%_%1.txt&(call )))||goto :merge
del %trace%_%1.txt
exit

关于file - 批处理 - 有没有办法批量同步锁定txt文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com