如何将Windows批处理文件转换为单行" cmd / c"命令?

时间:2014-10-31 11:50:50

标签: windows batch-file cmd

我有下面的批处理文件,希望将其转换为单行 cmd / c 命令。

@ECHO OFF
SETLOCAL
FOR /F "TOKENS=2 DELIMS=:." %%I IN ('chcp') DO SET _codepage_=%%I
SET _codepage_=Cp%_codepage_: =%
ECHO %_codepage_%
ENDLOCAL

我试过了:

cmd /c FOR /F "TOKENS=2 DELIMS=:." %I IN ('chcp') DO @SET _codepage_=%I && @SET _codepage_=Cp%_codepage_: =% && @ECHO %_codepage_%

也尝试过:

cmd /v:on /c FOR /F "TOKENS=2 DELIMS=:." %I IN ('chcp') DO @SET _codepage_=%I && @SET _codepage_=Cp%_codepage_: =% && @ECHO !_codepage_!

但两种方法都不起作用!任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:3)

cmd /q/c"for /f "tokens=2delims=:." %a in ('chcp')do for %b in (%a)do echo(Cp%b"

原始代码做了什么?拆分chcp的输出,删除结束点(我不知道,谢谢),将值存储在变量中以从中删除空格并在其前面添加Cp和然后回显变量

这段代码有什么作用?拆分chcp的输出,删除结束点,但不是使用变量来移除空格,而是使用第一个循环的值上的附加for循环,而不是前缀变量,Cp包含在回显的数据中。

答案 1 :(得分:2)

我会使用MC ND answer。但是,只是为了yucks,我创建了另一个解决方案。

cmd /v:on /q /c "(for /f "delims=." %a in ('chcp') do for %b in (%a) do set cp=Cp%b) & echo !cp!"

请注意,对于所有解决方案,您可以考虑添加/D选项以防止自动运行命令运行。

答案 2 :(得分:1)

似乎我在 cmd 命令周围缺少双引号。这就是我最终做到这一点的方式:

cmd /v:on /q /c "FOR /F "TOKENS=2 DELIMS=:." %I IN ('chcp') DO SET _codepage_=%I && SET _codepage_=Cp!_codepage_: =! && ECHO !_codepage_!"

也正确为上面指出的MC ND

cmd /q /c "FOR /F "TOKENS=2 DELIMS=:." %a IN ('chcp') DO FOR %b IN (%a) DO ECHO Cp%b"

我在Java中使用带有ProcessBuilder的单个命令来获取控制台的代码页,并将其传递给进程的stdout和stderr流,如下所示:

String encoding = getConsoleEncoding(); // use the above cmd command
BufferedReader stdout = new BufferedReader( new InputStreamReader(p.getErrorStream(),encoding) );

所以系统命令的结果如同 date / t 将在Java中正确显示。

答案 3 :(得分:0)

您可以将上面的内容保存到文件中,将其命名为my.bat。然后使用:

cmd.exe /c "call my.bat"

对于在一个命令行中,不使用批处理文件,您可以:

FOR /F "TOKENS=2 DELIMS=:." %I IN ('chcp') DO (SET _codepage1_=%I && SET _codepage_=Cp%_codepage1_% && ECHO %_codepage_%)