我需要帮助才能通过批处理文件实现以下目标。这就是我要做的,
-
运行 psexec 以执行"系统信息"并找到字符串"系统类型"
-
从 PsExec 输出确定"系统类型"(无论是"基于 X86 的电脑"还是"基于 X64 的电脑")。
-
在我的 PC 上本地映射驱动器,并根据系统类型复制文件。
这是我的剧本!
@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
echo %%i >> %logs%
PsExec.exe \%%i -u domainusername -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"
if "%%i"=="System Type: X86-based PC" (
net use m: \%%iC$ /user:domainusername "password"
xcopy "C:batch_filex86.txt" \%%iC$_supportsetup /y
net use m: /delete
) else (
net use m: \%%iC$ /user:domainusername "password"
xcopy "C:batch_filex64.txt" \%%iC$_supportsetup /y
net use m: /delete
)
)
脚本运行良好,直到这部分
@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
echo %%i >> %logs%
PsExec.exe \%%i -u domainusername -p "password" systeminfo | findstr /c:"System Type" >> "%Logs%"
并根据系统类型输出以下内容:
系统类型:基于 X86 的电脑或系统类型:基于 X64 的电脑
当IF 语句执行时,问题就来了。它仅将 x64.txt 复制到远程计算机,而不考虑远程计算机的系统类型。
使用 psexec 输出的命令替换也不起作用,
for /f "tokens=*" %%a in '(PsExec.exe \IPaddress -u domainusername -p "password" systeminfo | findstr /c:"System Type")' do set myvar=%%a
它说
| was unexpected at this time
有人可以帮忙吗?
%i 包含计算机名称,而不是 PsExec 的结果,所以当然你的 IF 语句永远不会为真。
在 For/f do() 子句中使用时,必须引号或转义特殊字符(如 |
)。我建议逃跑,^|
@echo off
set logs="C:logs.txt"
for /f %%i in (C:pro_arch.txt) do (
echo %%i >> %logs%
for /f "delims=" %%A in ('PsExec.exe \%%i -u domainusername -p "password" systeminfo ^| findstr /c:"System Type"') do (
>> "%Logs%" echo %%A
if "%%A"=="System Type: X86-based PC" (
net use m: \%%iC$ /user:domainusername "password"
xcopy "C:batch_filex86.txt" \%%iC$_supportsetup /y
net use m: /delete
) else (
net use m: \%%iC$ /user:domainusername "password"
xcopy "C:batch_filex64.txt" \%%iC$_supportsetup /y
net use m: /delete
)
)
)