我有下面的批处理文件,希望将其转换为单行 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_!
但两种方法都不起作用!任何人都可以帮助我吗?
答案 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_%)