当字符串不在文件名中或文件完成写入时移动文件的批处理文件

时间:2014-07-09 04:24:00

标签: batch-file

程序正在某个目录上编写flatfiles,问题是另一个程序在完成写入flatfile之前正在移动该文件。我无法控制这两个程序我只能为两者设置路径/目录所以我决定创建一个批处理文件,在"〜"不在文件名中。因为临时文件有"〜"在他们的文件名中。你能告诉我我的课程有什么问题吗?

echo off

%%a%% = Dir /b|Find /V "~" (C:\source)

move %%a%% (C:/dest)

pause

任何建议都会有所帮助

谢谢!

我尝试了面条代码

for / f %% A in(' dir / b ^ | findstr / i / v / c:"〜"')确实移动%% A(C: \ DEST)。

错误是

文件名,目录名或卷标语法不正确

我非常确定C:\ dest存在

3 个答案:

答案 0 :(得分:0)

for /f %%A in ('dir /b^|findstr /i /v /c:"~"') do echo %%A

请参阅for /?dir /?findstr /?

答案 1 :(得分:0)

对我来说似乎是XY problem

可悲的是,你对解决方案的勇敢尝试更多的是错误。

回到实际问题 - 我们创建了一个文件,需要在创建后移动。

关键问题是 - 我们怎么知道创作已经完成?

可能可能该文件确实是作为临时文件创建的,然后在完成时重命名。可能是正在创建的文件名包含~,但我认为这个假设非常不可靠。 ~经常出现在文件名中,但经常出现在短文件名中(文件名的'短'名称不符合8.3模式)。

创建文件的常规方法是打开文件,写入文件,然后在完成后关闭文件。可能听起来很明显,但也可以重新打开它并附加更多数据然后重新关闭它,但这将是一种相对罕见的方法。

很可能,创建应用程序使用open-write-close场景。我们可以在批处理中使用的技巧是它在关闭之前似乎具有零长度,因此

for /f %%a in (*.*) do if %%~za neq 0 ECHO(move "%%a" "c:\dest\"

应该有效(请注意\是一个目录分隔符; /是一个开关指示符。另请注意,move命令仅仅是echo ed - 删除echo(用于激活验证后的移动

如果我们有open-write-close-reopen-write_again-close场景,它会变得更复杂。那么我们要做的是每隔一段时间(比如5秒左右)获取目录列表并将其与之前的列表进行比较。如果文件的文件长度保持稳定且> 0,那么该文件似乎已准备好传输,如果没有,则等待下一个dir快照。

返回OP进行验证/评论......

答案 2 :(得分:0)

在文件夹中启动它,看看echo命令写入控制台的内容。

@ehco off
for /f "delims=" %%A in ('dir /b /a-d^|findstr /v "~" ') do echo move "%%A" "d:\folder"