批处理文件变量文件名和编辑



对游戏相当陌生,花了很多时间寻找帮助和示例。我已经有了这个版本,尽管我想通过一个输入文件"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_idRUN-时间值,那么它现在将显示为

!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时间值。

相关内容

  • 没有找到相关文章

最新更新