【问题标题】:Batch file that moves files when string is not in filename or when a file has finish writing当字符串不在文件名中或文件完成写入时移动文件的批处理文件
【发布时间】:2014-08-29 23:43:56
【问题描述】:

一个程序正在某个目录上写入平面文件,问题是另一个程序在完成写入平面文件之前正在移动文件。我无法控制这两个程序我只能为这两个程序设置路径/目录,所以我决定创建一个批处理文件,当文件名中没有“~”时移动文件。因为临时文件的文件名中有“~”。你能告诉我我的程序有什么问题吗?

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 存在

【问题讨论】:

    标签: batch-file


    【解决方案1】:
    for /f %%A in ('dir /b^|findstr /i /v /c:"~"') do echo %%A
    

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

    【讨论】:

    • 谢谢我用 move for /f %%A in ('dir /b^|findstr /i /v /c:"~"') do move %%A (C:\ dest) 错误是“文件名、目录名或卷标语法不正确”
    • 你需要指定你在做什么,有各种各样的事情需要考虑 - 空格/没有空格 - 起始目录 - 等等。我已经向你展示了一般形式 - 但你必须修复它以适合您的系统。我不知道这应该做什么move %%A (C:\dest)试试move "%%A" c:\dest
    • 感谢这个建议是完美的。括号是问题
    【解决方案2】:

    对我来说似乎是XY problem

    可悲的是,您在解决方案上的勇敢尝试是错误的。

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

    关键问题是 - 我们如何知道创造已经完成?

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

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

    创建应用程序很可能会使用打开-写入-关闭场景。我们可以在这里批量使用的技巧是,在关闭之前它的长度似乎为零,因此

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

    应该可以工作(注意\ 是一个目录分隔符;/ 是一个开关指示符。还要注意move 命令只是echoed - 删除echo( 以激活移动验证后)

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

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

    【讨论】:

    • 感谢您提供的代码,我从解释中学到了很多东西。我确定它在文件名中生成“`”的原因是因为这些是带有长名称的快速消息。但我相信你的方法更有效。不幸的是,出现错误“系统找不到文件“.”似乎无法在此线程上显示星号我在同一目录上运行批处理。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2017-08-21
      • 1970-01-01
      • 2021-11-25
      • 2012-12-04
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多