Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows server 2012中cmd批处理文件中/f%A的正确synax_Windows_Batch File_For Loop_Cmd_Windows Server 2012 R2 - Fatal编程技术网

windows server 2012中cmd批处理文件中/f%A的正确synax

windows server 2012中cmd批处理文件中/f%A的正确synax,windows,batch-file,for-loop,cmd,windows-server-2012-r2,Windows,Batch File,For Loop,Cmd,Windows Server 2012 R2,我正在windows 2012中从CMD批处理文件安装多个服务(使用dsmcutil),但是,虽然dsmcutil命令正确,但在for/f中创建的变量无法正常工作。我猜这是一种类似的行为,被称为全球化 我尝试了如下语法(dsmcutil命令经过测试且正确,) 我得到的错误是 “cpath\nodes.lst”do(此时意外出现) 问题是什么是适用于windows 2012 r2的正确语法? ..…如果在语法中从“for”调用变量,则通常为%A%,这只会产生与%A相同的错误。此外,必须使用(for

我正在windows 2012中从CMD批处理文件安装多个服务(使用dsmcutil),但是,虽然dsmcutil命令正确,但在for/f中创建的变量无法正常工作。我猜这是一种类似的行为,被称为全球化

我尝试了如下语法(dsmcutil命令经过测试且正确,)

我得到的错误是 “cpath\nodes.lst”do(此时意外出现)

问题是什么是适用于windows 2012 r2的正确语法? ..…如果在语法中从“for”调用变量,则通常为%A%,这只会产生与%A相同的错误。此外,必须使用(for/F“usebackq tokens=*%A),而不是像以前的w2k版本那样使用%%A

语法通常应该得到: 1.路径/节点名称(来自for循环和txt文件=nodes.lst) 2.指向正确路径\dsm.opt文件 3.使用正确的名称执行dsmutil安装服务


事实上,它永远不会超过第1点。

您的示例中最大的两个错误是,您没有在命令提示下检查
的输出/?
,并且需要延迟扩展,以便在同一代码块中创建和使用变量。另外一个重要的注意事项是,您通常不应该使用系统中已存在的名称,在本例中为
%dpath%

根据您的问题,这里有一个显示正确语法的基本示例。请注意,我没有检查您的
dsmcutil
行,因为这超出了问题的范围

@Echo关闭
SetLocal DisableDelayedExpansion
设置“cpath=%ProgramFiles%\tivoli\TSM\baclient\cifs”
设置“d_路径=%ProgramFiles%\tivoli\TSM\baclient”
设置“dsmcutil=%d\u路径%\dsmcutil”
设置“用户=服务用户”
设置“UserPa=sjkdfIHO127346JHG”
设置“通过=xxxkk123”
设置“ntdo=polka.net”
对于(“%cpath%\nodes.lst”)中的/F“UseBackQ令牌=*”%%A,请执行以下操作(
设置“mopt=%cpath%\%%A\%%A-dsm.opt”
SetLocal EnableDelayedExpansion
%dsmcutil%”安装sched/name:“TSM客户端计划程序%%A”/node:%%A-m”/密码:%%pass%”/eventlogging:“否”/optfile:“!mopt!”/schedlog:“%cpath%\%%A\DSMSched\%%A.log”/errorlog:“%cpath%\%%A\dsmrerror\%%A.log”/startnow:“是”/autostart:“是”/ntdomain:“%ntdo%”/ntaccount:“%User%/ntpassword:“%UserPa%”
端部
)

你猜到语法了吗?那行不通。请坚持。语法从未改变,在所有Windows版本(至少XP以后)中都是一样的哦-当然变量
mopt
必须是。
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
set cpath=C:\Program Files\tivoli\TSM\baclient\cifs
set dpath=C:\Program Files\tivoli\TSM\baclient
set dsmcutil=%dpath%\dsmcutil
set User=service_user
set UserPa=sjkdfIHO127346JHG
set pass=xxxkkk123
set ntdo=polka.net
for /F "usebackq tokens=*" {%A} IN "%cpath%\nodes.lst" do (
set mopt=%cpath%\%A\%A-dsm.opt
%dsmcutil% install sched /name:"TSM Client Scheduler %A" /node:%A-m /password:%pass% /eventlogging:no /optfile:"%mopt%" /schedlog:"%cpath%\%A\DSMSched_%A.log" /errorlog:"%cpath%\%A\DSMError_%A.log" /startnow:yes /autostart:yes /ntdomain:%ntdo% /ntaccount:%User% /ntpassword:%UserPa%
)