繁体   English   中英

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

[英]Batch file variable filenames and editing

这是游戏的新手,并花了许多时间寻找帮助和示例。 尽管我想通过使用单个输入文件'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。

任何帮助都将非常有帮助!

第一个问题是字符串SET语句中的空格很重要。 变量名和分配的值都将包含任何空格,因此set fname = %%T将设置一个名为"fname "而不是"fname"的变量-其值将包含%%T值之前的前导空格

接下来是永久的延迟扩展问题。 在一个block (带括号的语句序列)内,任何%var%都将在PARSE时被其值替换-在循环开始执行之前。

要访问RUN-TIME值,您需要执行SETLOCAL ENABLEDELAYEDEXPANSION语句,并在调用delayedexpansion !var! 访问RUN -time变量值。

但是请注意,您不能在有罪不罚的循环内简单地调用delayedexpansion 一次可以打开的数量是有限制的,因此您需要使用ENDLOCAL命令“将括号ENDLOCAL (达到逻辑End-Of-File等效于ENDLOCAL ),缺点是ENDLOCAL可以恢复调用匹配的SETLOCAL时将环境恢复为其值。 因此,通常在批处理开始时(通常在@echo off之后)执行SETLOCAL ENABLEDELAYEDEXPANSION

下期是

ren fname "%fname%" "C:\%fname%:~12%"

重命名命令的语法为ren sourcename newname恰好两个参数,将任何包含空格的参数括在"rabbit's ears"此外,目标名称仅是NAME-而不是路径。

然后是这个:

%comp_id% = %{comp_id:0:12} 

假设您已修复此问题以删除变量名中的空格,并且已为comp_id分配了值fred并且您已经意识到您正在处理comp_idRUN -time值,那么现在将显示为

!comp_id!=%{comp_id:0:12} 

批处理将解释为

fred=%{comp_id:0:12} 

并及时放弃。

您可能期望做的是

set comp_id=!comp_id:~0,12! 

也就是说,从第一个字符( 0 )到12字符,将comp_id设置为comp_id运行时值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM