Filewatcher以批处理文件的形式解压缩,运行和移动文件

时间:2017-03-21 10:53:09

标签: batch-file file-watcher

我想在批处理文件中创建一个filewatcher:

在folderA(.zip)中查看文件→将它们解压缩到folderB(同名)→然后触发批处理文件→对更多传入的.zip文件执行相同操作。

我在StackOverflow中检查了相关问题但是,我还需要一些帮助

library(dplyr)

var1 <- 1:20
var2 <- c(1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1)
var3 <- rep(3, 20)

dat <- data.frame (var1, var2, var3)
View(dat)


extract.with.context <- function(x, rows, after = 0, before = 0) {

  match.idx  <- which(rownames(x) %in% rows)
  span       <- seq(from = -before, to = after)
  extend.idx <- c(outer(match.idx, span, `+`))
  extend.idx <- Filter(function(i) i > 0 & i <= nrow(x), extend.idx)
  extend.idx <- sort(unique(extend.idx))

  return(x[extend.idx, , drop = FALSE])
}

extract.with.context(dat, dat$var2==0, after = 1, before = 1)

View(dat)

#expected output
var1 <- c(1,2,3,9,14,15,16,20)
var2 <- c(1,1,1,1,1,1,1,1)
var3 <- rep(3,length(var2))
dat <- data.frame(var1, var2, var3)
View(dat)

1 个答案:

答案 0 :(得分:3)

我发现您的代码存在两个主要问题。首先,您不能在for循环内使用标签。要解决这个问题,您可以将:BATCH1:BATCH2标签移到循环之外并进入子程序(当然,%%G将不会存在于循环外部,因此您需要通过它也作为参数新的子程序。)

我看到的第二个问题是你的括号不在正确的位置(可能你的缩进搞砸了,但这可能只是一个复制错误)。 (循环的for需要与do位于同一行,而其他内容需要写为) else (。您还错过了(两个语句中的初始if。基本上,批量锁定你的K&amp; R风格。

最终,您的代码看起来像这样:

:STARTPROCESS
CD /D %ROOT_DIR%
FOR /F "tokens=1-2 delims=." %%G in ('dir *.zip /b') do (
    REM unzip file
    %SEVENZIP_PATH%\7z.exe x "%ROOT_DIR%" -o%UNZIP_FOLDER% -y >> %LOG%
    echo %%G -- unzip complete

    REM run batch1
    call :BATCH1 "%%~G"
)

timeout 60
goto STARTPROCESS
cmd /k

:BATCH1
REM check ERROR from batch1 log

findstr /M "ERROR" %UNZIP_FOLDER%\%1\Logs\*.log 
If %ERRORLEVEL%==0 (
    echo Error Found
    move /Y "%UNZIP_FOLDER%\%%G" "%Folder1% >> %LOG%
    exit /b
) else (
    echo %%G Batch1 OK

    REM check ERROR from batch2 log
    findstr /M "Total Count : 0" %UNZIP_FOLDER%\%1\Data\*_Output.log 
    If %ERRORLEVEL%==0 (
        echo %%G Batch2 OK
        goto STARTPROCESS
    ) else (
        echo ERROR
        move /Y "%UNZIP_FOLDER%\%%G\fileA.xml" "%UNZIP_FOLDER%\bin >> %LOG%
        %SEVENZIP_PATH%\7z.exe a "%UNZIP_FOLDER%\%1" -o%ZIP_FOLDER% -y >>%LOG%
    )
)