相当新的游戏,花了很多时间寻找帮助和示例。我有一个版本的工作,虽然我想通过一个输入文件'computer_listc.txt'来简化流程。我基本上想要读取一系列文件夹路径(来自computer_listc.txt),并使用路径的一部分来编写更多cmd表达式。
我的问题是没有正确设置fname和comp_id。我想让它们等于T(文件名),然后编辑它们。
fname必须是删除前12个字符的文件路径。虽然comp_id需要等于文件路径中指定的计算机名称,例如
fname = c_modelling\model\slave1
comp_id = VOSTRO460-1
继承剧本。你能看到我的错误吗?
for /f "usebackq tokens=*" %%T in ("C:\c_modelling\Model\cal21_cal\Computer_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% >\\%%T\beo_insC.cmd
echo beo >>\\%%T\beo_insC.cmd
robocopy c:\c_modelling\model\cal21_cal \\%%T\ /s /e
start cmd.exe /c psexec \\%comp_id% -c c:\c_modelling\model\cal21_cal\beo_insC.cmd
del \\%%T\beo_insC.cmd
)
Computer_ListC.txt包含以下文件名:这将最终包含一长串计算机文件夹路径。
VOSTRO460-1\c_modelling\model\slave1
VOSTRO460-1\c_modelling\model\slave2
我正在创建一个* .cmd文件,用于'psexec',因为当我将进程定向到本地计算机时,路径默认为\ system32。
任何帮助都会非常有用!!
答案 0 :(得分:4)
第一个问题是字符串SET
语句中的SPACES很重要。变量名和赋值的值都包含任何空格,因此set fname = %%T
将设置名为"fname "
的变量,而不是"fname"
- 并且其值将包含值{{{{1}之前的前导空格。 1}}
接下来是永久性延迟扩张问题。在%%T
(一系列带括号的语句)中,任何block
将被 PARSE 时的值替换 - 在循环开始执行之前。
要访问 RUN-TIME 值,您需要执行%var%
语句,并且在调用SETLOCAL ENABLEDELAYEDEXPANSION
时,delayedexpansion
会访问 RUN - 时间变量值。
但请注意,您不能简单地在循环中调用!var!
而不受惩罚。您可以在任何时间打开的数量都有限制,因此您需要使用delayedexpansion
命令“关闭括号”(达到逻辑End-Of-File相当于ENDLOCAL
并且缺点是ENDLOCAL
在调用匹配的ENDLOCAL
时将环境恢复为其值。因此,SETLOCAL
通常在批处理开始时执行,通常在SETLOCAL ENABLEDELAYEDEXPANSION
下一期是
@echo off
重命名命令的语法是ren fname "%fname%" "C:\%fname%:~12%"
- 正好是两个参数,在ren sourcename newname
中包含任何包含空格的参数。此外,目标名称只是一个名称 - 不是路径。
然后是这个:
"rabbit's ears"
假设您已修复此问题以删除变量名中的空格,并且%comp_id% = %{comp_id:0:12}
已分配值comp_id
并且您已意识到您正在处理 RUN - fred
的时间值,然后现在显示为
comp_id
批次将解释为
!comp_id!=%{comp_id:0:12}
并立即放弃。
你可能期望做的是
fred=%{comp_id:0:12}
即,将set comp_id=!comp_id:~0,12!
设置为comp_id的 RUN -time值,从comp_id
个字符的第一个字符(0
)开始。