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



>我正在Windows 2012中从CMD批处理文件安装多个服务(使用dsmcutil(,但是虽然dsmcutil命令lien是正确的,但在/f中创建的变量无法正常工作。我想这是一种类似的行为,称为通融

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

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
set cpath=C:Program FilestivoliTSMbaclientcifs
set dpath=C:Program FilestivoliTSMbaclient
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%%ADSMSched_%A.log" /errorlog:"%cpath%%ADSMError_%A.log" /startnow:yes /autostart:yes /ntdomain:%ntdo% /ntaccount:%User% /ntpassword:%UserPa%
)

我得到的错误是 "cpathodes.lst"做(此时是出乎意料的。

问题是在Windows 2012 r2上工作的正确语法是什么? .....如果您在语法中从"for"调用变量,则通常是 %A%,这只会给出与 %A 相同的错误。 此外(对于/F "usebackq tokens=*" %A (必须使用,而不是像以前的 w2k 版本那样使用 %%A。

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

因为它永远不会超过第 1 点。

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

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

@Echo Off
SetLocal DisableDelayedExpansion
Set "cpath=%ProgramFiles%tivoliTSMbaclientcifs"
Set "d_path=%ProgramFiles%tivoliTSMbaclient"
Set "dsmcutil=%d_path%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"
SetLocal EnableDelayedExpansion
"%dsmcutil%" install sched /name:"TSM Client Scheduler %%A" /node:"%%A-m" /password:"%pass%" /eventlogging:"no" /optfile:"!mopt!" /schedlog:"%cpath%%%ADSMSched_%%A.log" /errorlog:"%cpath%%%ADSMError_%%A.log" /startnow:"yes" /autostart:"yes" /ntdomain:"%ntdo%" /ntaccount:"%User%" /ntpassword:"%UserPa%"
EndLocal
)

最新更新