程序正在某个目录上编写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存在
答案 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"