我目前在一个组织中工作,该组织已经迁移了他们的OU组,因此所有内容都属于一个名为"用户和工作站"的父文件夹。
这对我来说是一个小问题,因为我有一些批处理脚本可以从文本文件中删除用户和计算机,这是我经常运行的。
例如,我用来禁用一批机器的当前代码低于
@echo off
CLS
ECHO Now Disabling Machines...
TIMEOUT 2 > nul
Pause
FOR /f %%i in (%~dp0computernames.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文件夹结构中的空格造成的,但我不知道该怎么做才能更改脚本以继续工作。
有办法改变它吗?我应该试试别的吗?我想弄清楚这件事快疯了!!!
提前感谢
Ben
附言:我想出了一个似乎有效的解决方案-我会保持开放,以防有人能提出更好的方法来做我需要做的事情。请参阅下面的代码。看起来我需要添加正确的delims和两组双引号才能正确退出。。。。这对我来说没有太大意义…但它有效。。。
@echo off
setlocal disabledelayedexpansion
CLS
ECHO Now Disabling Machines...
ECHO.
Pause
FOR /f "delims= " %%i in (%~dp0computernames.txt) do (
echo disabling %%i && echo. && dsquery computer -name ""%%i"" | dsmod computer -disabled Yes && echo.
)
试着像一样在%%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
)
请参阅原始帖子了解解决方案。
禁用延迟扩展并指定delims,再加上对变量进行双引号引用,似乎已经解决了这个问题!