对游戏相当陌生,花了很多时间寻找帮助和示例。我已经有了这个版本,尽管我想通过一个输入文件"computer_listc.txt"来简化过程。我基本上想读取一系列文件夹路径(从computer_listc.txt),并使用部分路径来编写更多的cmd表达式。
我的问题是没有正确设置fname和comp_id。我想让它们等于T(文件名),然后编辑它们。
fname需要是删除了前12个字符的文件路径。而comp_id需要等于文件路径中指定的计算机名,例如
fname = c_modellingmodelslave1
comp_id = VOSTRO460-1
这是剧本。你能看到我的错误吗??
for /f "usebackq tokens=*" %%T in ("C:c_modellingModelcal21_calComputer_ListC.TXT") do (
set fname = %%T
ren fname "%fname%" "C:%fname%:~12%"
set comp_id = %%T
%comp_id% = %{comp_id:0:12}
mkdir %%T > NUL 2>&1
echo cd %fname% >\%%Tbeo_insC.cmd
echo beo >>\%%Tbeo_insC.cmd
robocopy c:c_modellingmodelcal21_cal \%%T /s /e
start cmd.exe /c psexec \%comp_id% -c c:c_modellingmodelcal21_calbeo_insC.cmd
del \%%Tbeo_insC.cmd
)
Computer_ListC.txt包含以下文件名:这最终会有一长串计算机文件夹路径。
VOSTRO460-1c_modellingmodelslave1
VOSTRO460-1c_modellingmodelslave2
我正在创建一个用于"psexec"的*.cmd文件,因为当我将进程定向到本地计算机时,路径默认为\system32。
任何帮助都将非常有帮助!!
第一个问题是字符串SET
语句中的空格是重要的。变量名称和分配的值都将包括任何空格,因此set fname = %%T
将设置一个名为"fname "
的变量,而不是"fname"
-并且其值将包含%%T
值之前的前导空格
接下来是永久延迟扩张问题。在block
(带括号的语句序列)中,任何%var%
都将在PARSE时间被其值替换,直到循环开始执行为止。
要访问RUN-TIME值,需要执行SETLOCAL ENABLEDELAYEDEXPANSION
语句,在调用delayedexpansion
时,!var!
访问RUN时间变量值。
但是,请注意,不能简单地在循环中调用delayedexpansion
而不受惩罚。一次可以打开的数量是有限制的,因此您需要使用ENDLOCAL
命令"关闭括号"(达到逻辑文件结尾相当于ENDLOCAL
),缺点是ENDLOCAL
会将环境恢复到调用匹配的SETLOCAL
时的值。因此,SETLOCAL ENABLEDELAYEDEXPANSION
通常在批处理开始时执行,通常在@echo off
之后执行
下一个问题是
ren fname "%fname%" "C:%fname%:~12%"
rename命令的语法是ren sourcename newname
——正好是两个参数,将任何包含空格的参数括在"rabbit's ears"
中。此外,目标名称仅为name,而不是路径。
然后是:
%comp_id% = %{comp_id:0:12}
假设您已经修复了这个问题以删除variablename中的空格,并且comp_id
已被分配了值fred
,并且您已经意识到您正在处理comp_id
的RUN-时间值,那么它现在将显示为
!comp_id!=%{comp_id:0:12}
哪个批次将被解释为
fred=%{comp_id:0:12}
并迅速放弃。
你可能期望做的是
set comp_id=!comp_id:~0,12!
也就是说,从12
字符的第一个字符(0
)开始,将comp_id
设置为comp_id的RUN时间值。