使用带/ P的SET时循环卡住

时间:2017-09-21 14:36:02

标签: loops batch-file variables parameters

有些人可能知道我正在编写一个脚本来收集计算机的信息以使该过程非常快。不,我有点卡住,因为我想将解码后的结果写入文本文件而不用新行发送垃圾邮件。问题是我想在第一轮解码后添加它停止的/p参数。

@echo offsure
set list=89 86 51 84 49 55 52 49 52 49
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR %%X IN (%list%) DO (
    set /p temp=%%~nX
    cmd /c exit !temp:~0,7!
    set temp2=!=exitcodeAscii! 
    echo !temp2!
) >> C:\TestConverters.txt
Echo. >> C:\TestConverters.txt
pause

这是我目前正在使用的源代码。如果我删除/ p参数它完全正常。所以现在我实际上只是想改进我在脚本中使用的测试结果,至少已经解决了这个问题。

3 个答案:

答案 0 :(得分:3)

set /p temp=%%~nX会询问用户名为temp的变量,并提示%%~nX。可能不是你想要的。

我想你想在没有换行的情况下写!temp2! 是的,有一个set /p技巧,但是a)你在错误的地方使用它并且b)你不希望用户输入某些内容(这将暂停你的脚本),但是从{ {1}}代替:

替换

NUL

echo !temp2!

(并删除前一行的尾随空格)

根据Compo的评论,您的代码可以简化为:

<nul set /p =!temp2!

答案 1 :(得分:1)

一个简单的例子,如果你真的不需要使用SET/P

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "list=89 86 51 84 49 55 52 49 52 49"
SET "variable="
FOR %%X IN (%list%) DO (CMD/C EXIT %%X
    Set "variable=!variable!!=EXITCODEASCII!")
IF DEFINED variable >"C:\TestConverters.txt" ECHO(%variable%
PAUSE

答案 2 :(得分:0)

或者你可以试试这个。

 @echo off
 set list=89 86 51 84 49 55 52 49 52 49
 SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
 FOR %%X IN (%list%) DO (
 set temp=%%~nX
 cmd /c exit !temp:~0,7!
 set temp2=!=exitcodeAscii!
 <nul set /p =!temp2!
 ) >> C:\BACKUPS\TestConverters.txt
 Echo. >> C:\BACKUPS\TestConverters.txt
 pause