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

标签 windows batch-file

对游戏相当陌生,花了很多时间寻找帮助和示例。我已经有一个可以工作的版本,尽管我想通过使用单个输入文件“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

我正在创建一个与“psexec”一起使用的 *.cmd 文件,因为当我将进程定向到本地计算机时,路径默认为\system32。

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

最佳答案

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

值之前包含前导空格

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

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

但请注意,您不能简单地在循环中调用delayedexpansion而不受惩罚。任何一次可以打开的数量是有限的,因此您需要使用 ENDLOCAL 命令“关闭括号”(到达逻辑文件结尾相当于 >ENDLOCAL),缺点是当调用匹配的 SETLOCAL 时,ENDLOCAL 将环境恢复到其值。因此,SETLOCAL ENABLEDELAYEDEXPANSION 通常在批处理开始时执行,通常是在 @echo off

之后

下一期是

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

重命名命令的语法是ren sourcename newname - 正好两个参数,将任何包含空格的参数括在“兔子耳朵”此外,目标名称只是一个NAME -不是路径。

然后是这样的:

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

假设您已修复此问题以删除变量名称中的空格,并且 comp_id 已被分配值 fred 并且您已经意识到您正在处理 < strong>RUN-comp_id 的时间值,那么现在将显示为

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

哪个批处理将解释为

fred=%{comp_id:0:12} 

然后立即放弃。

您可能期望做的是

set comp_id=!comp_id:~0,12! 

即将 comp_id 设置为 comp_id 的 RUN 时间值,从第一个字符 (0) 开始,对于 12 个字符。

关于windows - 批处理文件变量文件名和编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799443/

相关文章:

windows - 在 Windows/NTFS 上,可以将符号链接(symbolic link)移动到另一台计算机吗?

linux - 将 Linux 代码转换为批处理文件格式

windows - 暂停批处理文件直到网站停止完成?

batch-file - ImageMagick迁移不起作用

batch-file - WMIC LastBootUptime 格式问题,需要的总天数

Windows CSP API

windows - Windows 上的 Git checkout 和 reset 偶尔会显示随机文件已更改

c++ - 创建进程 : redirect child stdout to parent stdout in C++/Windows

windows - 使用命令提示符查找 CPU 数和每个 CPU 的内核数

windows - 使用 IF 批量过滤多个结果