gpt4 book ai didi

windows - 批处理文件 - 如果存在并输出错误

转载 作者:可可西里 更新时间:2023-11-01 11:18:52 25 4
gpt4 key购买 nike

信息:assets.txt 包含我可以通过网络连接到的 cpu 名称列表。

我需要将这个新的 .exe 复制到 200 多台计算机上,我想我可以使用 c$ 管理共享。这确实是我可以做到这一点的唯一方法,而无需单独前往工作站或一个一个地进行远程处理。

此脚本在没有“如果存在”的情况下工作,但我需要在尝试复制之前检查目录是否存在。我不明白为什么它不起作用。我还使用我的域管理帐户运行此脚本。

@echo off
REM Pull Computer Asset Tags from file
for /F "tokens=*" %%A in (assets.txt) do (
echo Start Processing %%A
REM Temporarily set file path for existence check
set file=\\%%A\C$\Program Files\Intouch2\Intouch2ca.exe
if EXIST "%file%" (
REM Rename old .exe
ren "\\%%A\C$\Program Files\Intouch2\Intouch2ca.exe" "Intouch2ca.bak"

REM copy new .exe from server to cpu asset
xcopy "\\server\my dir\management\it\software\Intouch Upgrade\Intouch2ca.exe" "\\%%A\C$\Program Files\Intouch2\" /Y
echo END Processing %%A
echo.
echo ------------------------------------------------------------
echo.
)
)

我也无法将错误输出到日志文件。我已经尝试过了,但这并不是我想要的。

xcopy "\\server\my dir\management\it\software\Intouch Upgrade\Intouch2ca.exe""\\%%A\C$\Program Files\Intouch2\"/Y 1>>错误.log 2>&1

我怎样才能让它只显示错误并列出发生错误的 %%A

提前感谢大家的宝贵时间。

最佳答案

在 block 语句(括号中的一系列语句)中,整个 block 被解析并然后执行。 block 中的任何 %var% 都将被该变量的值替换在 block 被解析时 - 在 block 被执行之前。

因此,在您的情况下,file 正在 block 中更改,因此 cmd 使用的值是其初始值,当整个for 被解析。

解决方案 1:使用 \\%%A\C$\Program Files\Intouch2\Intouch2ca.exe 代替 %file%

解决方案 2:在 @echo off 之后的单独一行中使用 setlocal enabledelayedexpansion 开始您的批处理,然后使用 !file! %var%

解决方案 3:调用内部例程以将修改后的值用作 %file%

解决方案 4:无论如何创建目录。 MD newname 2>nul 将静默创建一个新目录(如果它不存在)

关于windows - 批处理文件 - 如果存在并输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com