gpt4 book ai didi

windows - 文件写入完成后处理文件 Windows Command Line .bat

转载 作者:可可西里 更新时间:2023-11-01 14:38:33 28 4
gpt4 key购买 nike

我已经看到这个问题针对 java 和 linux 问过(没有太多回答),但没有针对 Windows 命令行批处理操作问过。我将描述我想使用 Windows 命令行执行的操作。我正在努力解决这个问题。

一个多媒体文件正在转换到文件夹 X。一旦文件转换完成,它就会使用 winSCP 进行 ftp。我大概可以理解的 winSCP 命令行语法。困扰我的是等待文件完成转换。

我概述的一种方法是使用这样的 for 循环:

文件大小写入变量

使用 ftp nul ping 技巧暂停 5 秒(如答案 1 中所述:Batch file to download a file from FTP)

然后检查文件大小是否与之前的变量相同,如果是...停止循环检查并启动 winSCP。 (我使用 winSCP 而不是 windows 命令行 ftp,因为 windows ftp 不是被动运行的)。

问题是我还没有找到将文件大小写入变量的方法。另外,我必须确保一旦文件开始通过 ftp 传输,它就会停止查看该文件并等待观看新的多媒体文件进入该文件夹。

我想这样做的真正原因是目前我正在等待所有文件完成转换然后通过 ftp 上传,这增加了过程的时间,我真的希望这个过程通过 bat 自动化,但除此之外,它还能节省我的时间。

在此先感谢您的帮助。

编辑:我刚刚找到此链接以获取文件的文件大小:Windows command for file size only?它没有回答我的问题,但绝对是等式的关键部分。

最佳答案

将文件大小放入变量很简单 - 对于 (filePath) 中的 %%F,请设置“size=%%~zF”

但我相信我可以为您提供更好的解决方案。

与 Unix 不同的是,大多数 Windows 进程在写入文件时都会获得文件的独占锁。假设您的转换过程在处理期间不断锁定输出文件,那么您可以简单地使用以下内容来测试文件是否被锁定(仍在处理)或未锁定(已完成处理):

( (call ) >>outputFile.ext ) 2>nul && (
echo The file is unlocked and ready for transfer
) || (
echo The file is still being created
)

(call ) 语法只是一个非常快速的命令,什么都不做——实际上是一个空操作。此命令保证不会有任何输出,因此当您将命令的结果附加到您的文件时,保证不会更改任何内容。

如果文件已经被锁定,因为它仍在被您的转换程序处理,那么重定向将失败。 2>nul 只是隐藏由于重定向失败而导致的任何错误消息,而 &&|| 运算符有条件地执行基于先前命令的成功或失败。

更新

(call) 中的空格很关键,允许“空操作”不返回错误 (errorcode=0)。去掉空格,(call),命令返回错误 (errorcode=1),这将破坏锁定检测算法。有趣的是,没有空格的表单会在不生成错误消息的情况下返回错误。我相信这两个命令是清除或设置批处理错误代码的最有效方法。

关于windows - 文件写入完成后处理文件 Windows Command Line .bat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226309/

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