【问题标题】:Intelligent folder in windows using batch file to copy fileswindows中使用批处理文件复制文件的智能文件夹
【发布时间】:2013-07-24 17:13:36
【问题描述】:

如果文件大小不再变化(完全处理),我想将文件从 dir1 移动到 dir2。一个可能的参加是询问 size0(在 0 秒)和 size10(在 10 秒),如果 size0=size10 而不是将文件从 dir1 移动到 dir2。

在windows xp的命令行中怎么做?

【问题讨论】:

  • 你可以有一个脚本,而不是一个 CLI 命令。

标签: windows batch-file windows-xp directory copy-paste


【解决方案1】:

试试这个:

@ECHO OFF &SETLOCAL
CD /d dir1
:loop
FOR %%a IN (file) DO SET "size=%%~za"
PING -n 10 localhost >NUL
FOR %%a IN (file) DO IF %%~za equ %size% (move "%%~a" dir2) ELSE GOTO :loop

【讨论】:

  • 这也很有效。它似乎更优雅但也更难理解:)我很抱歉没有接受您的回答,但感谢您的帮助。
  • +1 虽然 %size% 永远不会被更新,所以文件永远不会被复制 - 还是我误解了?它应该监视不断变化的大小并在它保持静态时复制。
【解决方案2】:

这样的事情可能会奏效:

@echo off

setlocal

set "file=C:\path\to\your.file"
set "destination=D:\some\folder"

:loop
call :GetSize "%file%" s1
call :Sleep 10
call :GetSize "%file%" s2
if %s1% neq %s2% goto loop

call :MoveUnlessExists "%file%"

goto :eof

:GetSize
set "%~2=%~z1"
goto :eof

:Sleep
set /a "n=%1+1"
ping -n %n% 127.0.0.1 >nul
goto :eof

:MoveUnlessExists
if not exist "%destination%\%~nx1" move "%~f1" "%destination%\"
goto :eof

【讨论】:

  • 谢谢!这很好用。 ping 步骤只是用于挂起,所以我也可以使用其他东西来暂停?
  • @Denis 是的。如果你手头有一个实际的sleep 命令,你可以删除整个:Sleep“子例程”。
  • 太好了,谢谢。另一个问题:如果我只想将文件从 dir1 复制到 dir2 而不是 dir2,我应该添加什么?有什么简单的方法吗?
  • 感谢您的快速回答。但是,它似乎不适用于此版本。最后一部分包括“%%~f1”,我将其更改为 %file%,然后它似乎可以工作。但是现在无论文件是否存在,似乎仍然要复制文件……我做错了什么?
  • 我的错误。 % 字符习惯性加倍。必须是%~nx1%~f1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多