我将这个批处理文件添加到任务调度程序中但它无法加载并且它保持循环,很可能是因为我编写的文件目录。但是,如果我是从本地目录运行此批处理文件,则可以运行此批处理文件。那么,如何更改if语句中的文件目录以允许它在任务调度程序中运行它?我需要使用哪条路径?
@ECHO Off
SETLOCAL
:CheckForFile
if exist "MATS\NX_EXTR.txt" %AND% if exist "MTA\NX_EXTR.txt" goto FileExists
timeout 1
goto :CheckForFile
:FileExists
FOR /f "tokens=1*delims=" %%a IN (MATS\NX_EXTR.txt) DO SET "L2a=%%a"&SET "L1a="&GOTO nextstep
:nextstep
(
FOR /f "delims=" %%a IN (MTA\NX_EXTR.txt) DO (
IF DEFINED L1a (ECHO(%%a) ELSE (SET "L1a=%%a"&CALL :sumlines)
)
FOR /f "skip=1delims=" %%a IN (MATS\NX_EXTR.txt) DO (ECHO(%%a)
) >C.txt
TYPE C.txt
GOTO :EOF
:sumlines
SET /a L2a=1%L1a:~10%+1%L2a:~10%
ECHO(%L1a:~0,10%%L2a:~1%
GOTO :eof
答案 0 :(得分:1)
似乎有些熟悉......
if exist "MATS\NX_EXTR.txt" %AND% if exist "MTA\NX_EXTR.txt" goto FileExists
首先,%AND%
不是必需的。如果存在 filename ,如果存在 filename2 某些参数
将执行something
(即使它是goto
)。
这可能会起作用,因为 and
未定义,因此%and%
被解析为空字符串。
很可能,问题是MATS\NX_EXTR.txt
是文件的相对路径名 - 它是.\MATS\NX_EXTR.txt
的缩写,因此查找文件取决于当前目录。
您的修复是
通过执行
更改到批处理中的相应目录 cd "d:\parent\of"
其中d:\parent of" is the parent directoru of
MATS \ NX_EXTR.txt (ie. the **absolute filepath** is
d:\ MATS \ NX_EXTR.txt`的父项
OR
用绝对文件路径替换MATS \ NX_EXTR.txt(即d:\parent of\MATS\NX_EXTR.txt
)
当然,您需要为您使用的每个文件名重复此操作,包括C.txt
为了不必维护此批次,您还可以使用
set "file1=d:\parent of\MATS\NX_EXTR.txt"
在程序开始时,然后使用%file1%
来引用该文件。显然,重复所有文件 - 甚至可能将符号名称file1
更改为可能带有某些含义的内容(例如newdatafile
)
修订示例(我不知道您的实际绝对文件名)
@ECHO Off
SETLOCAL
set "file1=c:\wherever\MATS\NX_EXTR.txt"
set "file2=c:\wherever\MTA\NX_EXTR.txt"
set "file3=c:\wherever\C.txt"
:CheckForFile
if exist "%file1%" if exist "%file2%" goto FileExists
timeout 1
goto :CheckForFile
:FileExists
FOR /f "tokens=1*delims=" %%a IN (%file1%) DO SET "L2a=%%a"&SET "L1a="&GOTO nextstep
:nextstep
(
FOR /f "delims=" %%a IN (%file2%) DO (
IF DEFINED L1a (ECHO(%%a) ELSE (SET "L1a=%%a"&CALL :sumlines)
)
FOR /f "skip=1delims=" %%a IN (%file1%) DO (ECHO(%%a)
) >%file3%
TYPE %file3%
GOTO :EOF
:sumlines
SET /a L2a=1%L1a:~10%+1%L2a:~10%
ECHO(%L1a:~0,10%%L2a:~1%
GOTO :eof
请注意,如果分配给%filen%
的值包含 Space 等分隔符,则必须引用%filen%
{。{1}}。
如果这导致格式
"%%file3%"
然后您需要在for /f ... in ("...") ...
usebackq
选项
例如
for /f
(用于强调的上限; FOR /f "USEBACKQdelims=" %%a IN ("%file2%") DO (
可以是任何情况下)
如果usebackq
应用于“字符串”而不使用 for /f ...
选项,则会解析usebackq
,而不是"quoted string"
中的数据}