1

我目前在一个已迁移其 OU 组的组织中工作,以便所有内容都属于名为“用户和工作站”的父文件夹。

这对我来说是个小问题,因为我有一些批处理脚本可以从文本文件中删除用户和计算机——我经常运行这些脚本。

例如,我用来禁用一批机器的当前代码如下

@echo off 
CLS
ECHO Now Disabling Machines...
TIMEOUT 2 > nul
Pause
FOR /f %%i in (%~dp0\computernames.txt) do ( 
dsquery computer -name %%i | dsmod computer -disabled Yes
)

如果我在更改后运行此代码,我会收到以下错误

dsmod failed:'Target object for this command' is missing.
type dsmod /? for help.

但是,如果我在命令提示符中手动键入 dsquery / dsmod 代码行并将“%%i”替换为失败的计算机,则它会成功。

我几乎可以肯定这是由于 OU 文件夹结构中的空格造成的,但不知道如何更改我的脚本以继续工作。

有没有办法改变它?我应该尝试别的吗?我要疯了才想办法解决这个问题!!!

提前致谢,

PS我想出了一个似乎可行的解决方案 - 我会保持开放,以防任何人都可以提出更好的方法来做我需要做的事情。请参阅下面的适用于我的代码。看起来我需要添加正确的分隔符和两组双引号才能正确退出......这对我来说没有太大意义......但它确实有效......

@echo off
setlocal disabledelayedexpansion


CLS
ECHO Now Disabling Machines...
ECHO.
Pause
FOR /f "delims= " %%i in (%~dp0\computernames.txt) do ( 
echo disabling %%i && echo. && dsquery computer -name ""%%i"" | dsmod computer -disabled Yes && echo.
)
4

2 回答 2

0

尝试在此行中的 %%i 上使用引号,如下所示

dsquery computer -name "%%i" | dsmod computer -disabled Yes

编辑(在下面添加):啊……我敢打赌当前目录不是你想的那样。也许您正在从 UNC 驱动器执行。试试这个:

pushd %~dp0
FOR /f %%i in (computernames.txt) do ( 
   dsquery computer -name "%%i" | dsmod computer -disabled Yes
)
于 2013-09-04T01:37:12.463 回答
0

请参阅原始帖子以获取解决方案。

禁用延迟扩展并指定分隔符,以及双双引号变量似乎已经解决了这个问题!

于 2013-09-12T04:30:00.727 回答