我想在批处理文件中创建一个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)
答案 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%
)
)