我们知道这个工程,并通过命令行...编号效果很好。 Using forfiles with multiple file types for search mask?
for %G in (fileone, filetwo) do forfiles /P D:\hold\logs /M *.%G.* /C "cmd /c echo @path"
我们想要做的是使用这两个文件掩码:fileone和FileTwo传送到电话到另一FORFILES并与弯了腰%%表示对此现在是在一个批处理脚本..我想我们也许可以在做这两项操作一度?
SET SOMELOGS=D:\hold\logs
for %%G in (fileone, filetwo) do forfiles /P %SOMELOGS% /M *.%%G.* /C "cmd /c ECHO @path & call :locate @path"
:locate
echo somepath %%1
FOR /f "tokens=1-9 delims=/: " %aa IN ('forfiles /P "%SOMELOGS%" /M %%1 /D -1 /C "cmd /c echo @file @fdate @ftime"') DO call :ZIP %%a %%b %%c %%d %%e %%f %%g
:ZIP
PAUSE
结果是:
"D:\hold\logs\server.fileone.log.2013-12-14.a"
Invalid attempt to call batch label outside of batch script.
"D:\hold\logs\server.fileone.log.2013-12-15.a"
Invalid attempt to call batch label outside of batch script.
"D:\hold\logs\server.fileone.log.2013-12-15.b"
Invalid attempt to call batch label outside of batch script.
"D:\hold\logs\server.fileone.log.2013-12-16.a"
Invalid attempt to call batch label outside of batch script.
这似乎并没有工作,要么..不能使用:/ C超过一次...... Ref..nested forfiles: path and extension filter
SET SOMELOGS=D:\hold\logs
for %%G in (fileone, filetwo) do forfiles /p %SOMELOGS% /m *.%%G.* "forfiles /p @path /M %%1 /D -1 /C "cmd /c echo @file @fdate @ftime"') DO call :ZIP %%a %%b %%c %%d %%e %%f %%g
:ZIP
PAUSE
你FORFILES命令启动一个新的CMD.EXE的过程,从中你尝试调用原始批处理过程中的子程序。你不能做到这一点 - 孩子进程无法访问始发之一。
相反,你可以使用一个额外的参数执行相同的批处理文件,(无需在这种情况下CALL),并在顶部添加一个IF检测附加参数和GOTO子程序。
注 - 你缺少在几个地方EXIT /B
- 你不想落入下面的子例程!
@echo off
if "%~1" equ ":locate" goto locate
SET SOMELOGS=D:\hold\logs
for %%G in (fileone, filetwo) do forfiles /P %SOMELOGS% /M *.%%G.* /C "cmd /c ECHO @path & 0x22%~f00x22 :locate @path"
exit /b
:locate
shift /1
echo somepath %%1
FOR /f "tokens=1-9 delims=/: " %a IN ('forfiles /P "%SOMELOGS%" /M %%1 /D -1 /C "cmd /c echo @file @fdate @ftime"') DO call :ZIP %%a %%b %%c %%d %%e %%f %%g
exit /b
:ZIP
PAUSE
exit /b
但我认为这是一个更好的办法。您可以处理第一FORFILES你处理的第二个同样的方式,使用一个额外的FOR / F。
@echo off
if "%~1" equ ":locate" goto locate
SET SOMELOGS=D:\hold\logs
for %%G in (fileone, filetwo) do for /f "delims=" %%F in (
'forfiles /P %SOMELOGS% /M *.%%G.* /C "cmd /c ECHO @path"'
) do (
echo %%F
call :locate %%F
)
exit /b
:locate
echo somepath %%1
FOR /f "tokens=1-9 delims=/: " %a IN (
'forfiles /P "%SOMELOGS%" /M %%1 /D -1 /C "cmd /c echo @file @fdate @ftime"'
) DO call :ZIP %%a %%b %%c %%d %%e %%f %%g
exit /b
:ZIP
PAUSE
exit /b
最后,我不明白为什么你需要的任何子程序,因为你可以代码带括号的块中把多个命令。我也想不明白为什么你需要FORFILES的两个层次。在我看来,像你迄今为止编写的代码可以用一个FORFILES来完成。