Windows 批量从dsget中删除行
我正在写一个脚本,查询AD以提取必要的信息,从而终止分离。我的批处理脚本如下Windows 批量从dsget中删除行,windows,batch-file,Windows,Batch File,我正在写一个脚本,查询AD以提取必要的信息,从而终止分离。我的批处理脚本如下 echo Please enter the employee's name below... echo. echo. set /p first="First Name: " set /p last="Last Name: " echo. Title %first% %last%'s information... echo Please wait while information is loaded... echo.
echo Please enter the employee's name below...
echo.
echo.
set /p first="First Name: "
set /p last="Last Name: "
echo.
Title %first% %last%'s information...
echo Please wait while information is loaded...
echo.
echo.
echo.
echo Username:
@echo off
for /f "delims=" %%i in ('dsquery user -name "*%last%* *%first%*"') do set UserID=%%i
echo %UserID%
echo Username: %UserID% >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
echo Office
FOR /F "usebackq tokens=1 skip=1 delims=" %%A in (`"echo %UserID% | dsget user -office"`) do (set "Office=%%A")
echo %Office%
pause
第一部分是正确完成的,但是当它试图提取office信息时,脚本就崩溃了。我这样做的原因是,如果我只执行echo%UserID%| dsget user-office,它将输出
office
XX-XX-XX
dsget suceeded
我只想将实际办公室位置的中间线设置为变量办公室
我已经看过这里的许多解决方案,但我似乎无法让它正常工作。我想知道这是否是因为我的回声和管道
echo%UserID%| dsget user-office使用该变量的原因是,它执行搜索的速度比必须重做dsquery时快得多
你们能给我的任何帮助都太棒了
多谢各位
编辑:
好吧,我错过了^(那到底是怎么回事)
我的代码现在是
echo Office
echo ------------------------------------------------------------------------------
@rem echo %UserID% | dsget user -office
echo Before >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
FOR /F "tokens=1 skip=1 delims=" %%A in (`echo %UserID%^| dsget user -office`) do (set "Office=%%A")
echo After >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
echo %Office%
echo %Office% >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
echo After echoing variable >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
它不再崩溃,而是告诉我
The system cannot find the file 'echo
ECHO is off.
以及输出所有三个echo语句
希望最后一次编辑:
我的代码目前是
echo Office
echo ------------------------------------------------------------------------------
echo Before >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
FOR /F "tokens=1 skip=1 delims=" %%A in ('echo %UserID%^|dsget user -office^|Find /V "office"^|Find /V "dsget"') do (set "office=%%A")
echo After >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
echo Office: %office% >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
echo After echoing variable >> C:\Users\%username%\Desktop\Termination\%first%%last%.txt
除了“Office”之外,它没有输出任何东西:我认为变量Office中没有保存任何东西,所以它没有输出任何东西
再次编辑:
因此,如果我执行echo%UserID%^ | dsget user-office
我将得到以下结果
我使用find命令只保留中间线。然后,我希望中间一行输出到一个变量,以后可以引用该变量。问题在于代码现在的方式,它没有输出变量,只是空白。您是否尝试过不使用双引号:
('echo%UserID%^ | dsget user-office')
无需使用USEBACKQ
选项。在我看来,您的命令中没有使用单引号。正如SachDee所指出的那样,只需使用单引号并转义管道即可。@SachDee我缺少^I,我现在更新了代码。它没有崩溃,这是伟大的,但它是如此接近!还有其他想法吗?@Schurrsthing,你在引用一句话。“你只需要引用一句话就行了。”“壁球手,我太傻了。好的,最后一次编辑。它没有输出%office%,几乎就像它没有存储任何东西一样。谢谢你迄今为止的帮助。快速提问:^做什么?