【发布时间】:2019-01-01 17:16:55
【问题描述】:
我有一些工具正在尝试在 MDT 服务器的后端批处理脚本。这些工具之一是 DISM/ImageX。我试图自动化的是一个检查文件夹的脚本,以便 DISM 可以提取单个 WIM 文件,然后我可以使用另一个实用程序来进行更新。
不进入 WSUS。也不是 SCCM。我知道可以使用它们来完成,但我希望将我的部署时间保持在每个给定操作系统的最新版本接近 15-20 分钟。
我的很多后端工具都可以正常工作,但是我在压缩批处理文件的这一部分时遇到了问题,以便它使用 for 循环来检查目录,而不是重复相同的代码结束了。
我从来没有真正接触过批处理脚本,但是,嘿,它似乎可以完成我能想到的几乎所有技巧,而且我一直在寻找优化我的代码的方法。
也许有人可以看到我在这里尝试用我的批处理文件做什么,告诉我我哪里出错了?
我已经写了很长的路,但我想用 =
setlocal
set EnabledDelayedExpansion
set _d=\\cp
set 3d_=G:\DISM
set 3d7a=%3d_%\7
set 3d7b=%3d_%\7\7.1
set 3d7c=%3d_%\7\7.2
set 3d7d=%3d_%\7\7.3
set 3d7e=%3d_%\7\7.4
set 3d8a=%3d_%\8
set 3d8b=%3d_%\8\8.1
set 3d8c=%3d_%\8\8.2
set 3d8d=%3d_%\8\8.3
set 3d8e=%3d_%\8\8.4
set 3dxa=%3d_%\10
set 3dxb=%3d_%\10\10.1
set 3dxc=%3d_%\10\10.2
set 3dxd=%3d_%\10\10.3
set 3dxe=%3d_%\10\10.4
goto :3d7f
:3d7f
for /f "tokens=5 delims= " %%a in ('%3d7a% %3d7b% %3d7c% %3d7d% %3d7e%') do
(
if not exist %%a (
mkdir %%a)
goto :3d8f
:3d8f
for /f "tokens=5 delims= " %%a in ('%3d8a% %3d8b% %3d8c% %3d8d% %3d8e%') do
(
if not exist %%a (
mkdir %%a)
goto :3dxf
:3dxf
for /f "tokens=5 delims= " %%a in ('%3dxa% %3dxb% %3dxc% %3dxd% %3dxe%') do
(
if not exist %%a (
mkdir %%a)
goto :exit
)
希望创建顶部设置变量中列出的目录,使用迭代 for 循环检查目录是否存在,如果不存在则创建它们。
每个变量步骤都会在另一个全局批处理文件中本地化正确的目标目录,我最终会使用它来分发到其他 MDT 服务器,这是我现在正在处理的部分。
- 编辑了 Squashman @ 5:34EST 1/1/19 指出的错误(谢谢老兄)
【问题讨论】:
-
这是什么:
&&a?你的意思是这样做:%%a?无论如何,您无需在尝试创建目录之前检查目录是否存在。您可以只创建目录并将错误重定向到 nul 设备。您还缺少每个FOR命令的右括号。 -
是的。是的,谢谢。创建目录并将错误重定向到 nul 设备?没想到...我可以阅读很多编程,但是在编写它时,我的范围相当有限。不过我正在努力,感谢您的更正和提示!
-
基本上......脚本中没有列出的是“你想为 DISM 使用什么工作站?”因为我使用的工具需要一些硬件/时间来处理,而且我不想使用服务器,因为它有点旧。尝试使用一些 pushd 和 popd 但这不起作用。但你的解释可能会有所帮助。基本上,批处理脚本有很多其他部分都允许通过提升脚本。希望我使用的是域,但此时它都是基于工作组的。但除此之外,由于某些命令非常长,因此变量会缩短很多代码。
-
请注意
pushd只是设置工作文件夹,它不会推送工作负载(它仍然是运行脚本的服务器)。您需要像 PSEXEC 这样的东西来实际转移工作负载。 -
而不是 psexec,我正在考虑使用一些 powershell 命令,或者只是 xcopy 文件和工作负载,仍然学习一些如何从脚本来回传输东西,尽管 MDT 正在做大部分工作,我只是把它写成备用脚本以防万一。像 LGPO 之类的
标签: loops batch-file for-loop dism