如何指定文件目录以使其在任务计划程序中运行?

时间:2014-11-28 01:32:47

标签: windows batch-file cmd scheduled-tasks

我将这个批处理文件添加到任务调度程序中但它无法加载并且它保持循环,很可能是因为我编写的文件目录。但是,如果我是从本地目录运行此批处理文件,则可以运行此批处理文件。那么,如何更改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

1 个答案:

答案 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"中的数据}