我正在尝试编写一个批处理文件,我有一个命令:
encrypt.bat -g firstSeed > C:\MyWorkingDir\key.txt
此命令创建包含类似
的字符串的文件key.txt(以前不存在)2014-10-30 11:52:51,430 INFO [main] security.EncryptionUtil main (EncryptionUtil.java:304) - 45aa826df39cd1b4
现在的问题是我希望文件key.txt只包含字符串45aa826df39cd1b4。我的意思是,没有日志信息。 有办法吗?
提前致谢。
答案 0 :(得分:1)
如果您知道命令的输出不会改变且键是字符串中的第9个非空白元素,那么最简单的解决方案将是
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=9" %%a in ('encrypt.bat -g firstSeed') do (>"C:\MyWorkingDir\key.txt" echo(%%a)
如果线的格式可以改变,最好首先读取数据然后将其拆分
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('encrypt.bat -g firstSeed') do set "line=%%a"
for %%a in ("%line: =" "%") do if not "%%~a"=="" set "key=%%~a"
>"C:\MyWorkingDir\key.txt" echo(%key%
在这两种情况下,for /f
命令都会执行encrypt.bat
命令并检索输出。
在第一种情况下,我们只对行中的第9个元素感兴趣(默认情况下分隔符是制表符和空格)。
在第二种情况下,整行被重新加载并存储在变量中。然后变量是"引用"并且其中的每个空格都替换为" "
,因此,初始完整字符串中的每个元素现在都是带引号的字符串,每个元素都有空格,for
将遍历此列表存储值%key%
变量。当变量被覆盖时,最终值是必需元素。
答案 1 :(得分:0)
假设空格(或制表符)分隔的“单词”的数量是常数:
for /f "tokens=9" %%A in ('encrypt.bat -g firstSeed') echo %%A>"C:\MyWorkingDir\key.txt"