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私はうまくいくと思われる解決策を思いつきました.誰かが私がしなければならないことをするためのより良い方法を提案できるように、私はこれを開いたままにします. 私のために働くコードについては、以下を参照してください。正しく終了するには、正しい delims と 2 組の二重引用符を追加する必要があったようです....私にはあまり意味がありません...しかし、うまくいきます...

@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

解決策については、元の投稿を参照してください。

遅延展開を無効にしてdelimsを指定し、変数を二重引用符で囲むと、問題が解決したようです!

于 2013-09-12T04:30:00.727 に答える
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 に答える