Windows 批量从dsget中删除行

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.

我正在写一个脚本,查询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.
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%,几乎就像它没有存储任何东西一样。谢谢你迄今为止的帮助。快速提问:^做什么?