如何让windows中的cmd中一个命令的输出作为另外一个命令的参数
发布网友
发布时间:2022-06-02 18:11
我来回答
共1个回答
热心网友
时间:2024-10-08 13:22
【背景】
折腾:
【记录】尝试给右键打开Cygwin的mintty中加上log文件功能
期间,已知:
cmd中,运行:
E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
可以得到:
20130906_224844
希望将此值,传递到:
E:\dev_install_root\cygwin\bin\mintty.exe –log=E:\201309.log
中,把201309替换掉,即类似于这样的含义:
E:\dev_install_root\cygwin\bin\mintty.exe –log=E:\(E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S).log
【折腾过程】
1.关于cmd中的重定向,只是>,貌似没法简单的实现这类效果。
2.然后参考了一堆的教程:
CMD命令for语句的用法详解
关于cmd命令的重定向输出
Using command redirection operators
CMD命令行高级教程精选合编
试了半天:
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
20130906_224844
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=<E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
+%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=|E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
20130906_230226
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
+%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S | set CUR_DATETIME=
/usr/bin/date: write error
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S > set CUR_DATETIME=
/usr/bin/date: extra operand `CUR_DATETIME='
Try `/usr/bin/date --help' for more information.
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
20130906_230315
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S > set CUR_DATETIME=
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=`E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S`
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
`E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S`
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=<E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
+%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>CUR_DATETIME=2013
'CUR_DATETIME' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=2013
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
2013
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
20130906_231133
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S 1>&1
重定向句柄 1 时,
无法复制此句柄。
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=|'E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S '
文件名、目录名或卷标语法不正确。
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=|E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
20130906_231328
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
2013
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=<E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
+%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=|E:\dev_install_root\cygwin\bin\date.exe
Fri Sep 6 23:14:31 2013
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
+%Y%m%d_%H%M%S
C:\Users\Administrator.PC-20130611GART>set CUR_DATETIME=<E:\dev_install_root\cygwin\bin\date.exe
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
%CUR_DATETIME%
C:\Users\Administrator.PC-20130611GART>echo %CUR_DATETIME%
C:\Users\Administrator.PC-20130611GART>E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\`E:\dev_install_root\cygwin\bin\date.exe +%Y%m%d_%
H%M%S`.log
C:\Users\Administrator.PC-20130611GART>
结果还是没达到目标。
3.参考:
Variables: extract part of a variable (substring)
去试试。
C:\Users\Administrator.PC-20130611GART>SET _test=123456789abcdef0 && SET _result=%_test:~0,5% && ECHO %_result%
%_result%
C:\Users\Administrator.PC-20130611GART>SET _test=123456789abcdef0 & SET _result=%_test:~0,5% & ECHO %_result%
%_test:~0,5%
C:\Users\Administrator.PC-20130611GART>SET _test=123456789abcdef0 | SET _result=%_test:~0,5% | ECHO %_result%
12345
4.再参考:
Howto: Get variable substrings in Bat/Cmd scripts
去试试:
C:\Users\Administrator.PC-20130611GART>date
当前日期: 2013/09/06 周五
输入新日期: (年月日)
C:\Users\Administrator.PC-20130611GART>time
当前时间: 23:31:07.82
输入新时间:
C:\Users\Administrator.PC-20130611GART>date /t
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>time /t
23:31
C:\Users\Administrator.PC-20130611GART>time /?
显示或设置系统时间。
TIME [/T | time]
显示当前时间设置和输入新时间的提示,请键入
不带参数的 TIME。要保留现有时间,请按 Enter。
如果命令扩展被启用,TIME 命令会支持 /T 命令行开关;该命令行开关告诉
命令只输出当前时间,但不提示输入新时间。
C:\Users\Administrator.PC-20130611GART>date --help
系统无法接受输入的日期。
输入新日期: (年月日)
C:\Users\Administrator.PC-20130611GART>date /?
显示或设置日期。
DATE [/T | date]
显示当前日期设置和输入新日期的提示,请键入
不带参数的 DATE。要保留现有日期,请按 Enter。
如果命令扩展被启用,DATE 命令会支持 /T 开关;
该开关指示命令只输出当前日期,但不提示输入新日期。
C:\Users\Administrator.PC-20130611GART>echo %date%
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>echo %date:~4,10%
/09/06 周五
C:\Users\Administrator.PC-20130611GART>echo %date:~,4%
2013
C:\Users\Administrator.PC-20130611GART>echo %date:~5,2%
09
C:\Users\Administrator.PC-20130611GART>echo %date:~8,2%
06
C:\Users\Administrator.PC-20130611GART>echo %time%
23:34:25.60
C:\Users\Administrator.PC-20130611GART>echo %time~,2%
%time~,2%
C:\Users\Administrator.PC-20130611GART>echo %time~0,2%
%time~0,2%
C:\Users\Administrator.PC-20130611GART>echo %time%
23:34:57.07
C:\Users\Administrator.PC-20130611GART>echo %time:~,2%
23
C:\Users\Administrator.PC-20130611GART>echo %time:~3,2%
35
C:\Users\Administrator.PC-20130611GART>echo %time:~6,2%
22
C:\Users\Administrator.PC-20130611GART>echo %time:~9,2%
17
C:\Users\Administrator.PC-20130611GART>set DATE=date | echo %DATE%
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>set CURDATE=date | echo %CURDATE%
%CURDATE%
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% | echo %CURDATE%
%CURDATE%
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date%
C:\Users\Administrator.PC-20130611GART>echo %CURDATE%
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && echo %CURDATE%
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>set CURTIME=%date% && echo %CURTIME%
%CURTIME%
C:\Users\Administrator.PC-20130611GART>set CURTIME=%time% && echo %CURTIME%
2013/09/06 周五
C:\Users\Administrator.PC-20130611GART>set CURTIME=%time% && echo %CURTIME%
23:39:42.27
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && echo %CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,4%
20130906 周
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && echo %CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%
20130906
C:\Users\Administrator.PC-20130611GART>set CURTIME=%date% && echo %CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
C:\Users\Administrator.PC-20130611GART>set CURTIME=%date% && echo %CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
23395517
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%date% && echo %CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CURTIME:~
,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
20130906_203/9/6
C:\Users\Administrator.PC-20130611GART>set CURTIME=%time% && echo %CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
203/9/6
C:\Users\Administrator.PC-20130611GART>set CURTIME=%time% && echo %CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
23431515
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && echo %CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CURTIME:~
,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%
20130906_23431811
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && echo %CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CURTIME:~
,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%.log
20130906_23434965.log
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && set LOGFILE=%CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CU
RTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%.log && echo %LOGFILE%
%LOGFILE%
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && set LOGFILE=%CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CU
RTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%.log && echo %LOGFILE%
20130906_23440529.log
C:\Users\Administrator.PC-20130611GART>
5.然后再去最后测试,能否真正用于mintty的log参数:
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && set CURLOGFILE=%CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_
%CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%.log && E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE%
虽然打开mintty了,也创建log文件了,可惜只是:
%CURLOGFILE%
而不是预想的日期的值。
但是,试了第二次,结果就可以了:
即,用:
C:\Users\Administrator.PC-20130611GART>set CURDATE=%date% && set CURTIME=%time% && set CURLOGFILE=%CURDATE:~,4%%CURDATE:~5,2%%CURDATE:~8,2%_%CURTIME:~,2%%CURTIME:~3,2%%CURTIME:~6,2%%CURTIME:~9,2%.log && E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE%
的cmd命令,打开了mintty,
且的确生成了对应的log文件:
E:\20130906_23454766.log
效果还是不错的。
6.不知道,此处是否是有其他问题。搞得第二次才可以。
然后,把此部分的设置,尝试去添加到原先的注册表中。
之前是这样的,只有-e参数:
现在去添加变为:
set DATENOW=%date% && set TIMENOW=%time% && set CURLOG=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log && E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOG% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"
即:
然后,再去测试一下:
效果是:
找不到应用程序
难道是command的值,太长了?(刚才在regedit中,都无法显示全。。。)追问这个我看过了的 谢谢
命令提示符怎么用
一、打开命令提示符 在Windows系统中,可以通过按下Win键+R,在运行窗口中输入“cmd”命令,然后按下Enter键来打开命令提示符。另外,也可以在开始菜单中搜索“命令提示符”或“cmd”来找到并打开它。二、基本命令 1. 文件操作:使用“dir”命令可以列出当前目录中的文件和文件夹,使用“cd”命令可以切...
在cmd中 如何将屏幕上的显示 通过什么命令输出到指定的文本文件中 谢谢...
1、点击电脑桌面上的开始图标,点击菜单上的运行。2、在输入框输入CMD,然后点击界面下方的确定。3、输入测试命令:ping baidu.com -t,点击回车键即可看到结果。4、再次输入命令:ping baidu.com -t > test.txt,然后点击回车键。5、然后在文件夹,根据保存路径,找到自动保存的文件。6、打开即可看到...
Windows批处理CMD如何截取一个字符串中指定字符后面的字符串?_百度知 ...
1、首先打开cmd窗口,然后输入格式 :%PATH:str1=str2% 将字符串的变量%PATH%中的str1替换为str2。2、在尝试将www.baidu.com中的.更改为。3、字符串截取格式:%a:~[m[,n]]% 方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移...
为什么我的CPU使用率经常在100%~~
在注册表中的情况最复杂,通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”目录下,查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关,如“Acid Battery v1.0木马”,它将注册表“...
CPU占用率100%是怎么回事?
所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因: 当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。 解决方法: 方法一:关闭“为菜单和工具提示使用过渡效果” 1、点击“开始”--“控制面板”...
如何制作一个批处理打开多个cmd窗口分别执行命令
1、命令使用start命令打开 cmd窗口,具体参数意义见结尾附录 2、/K :是让命令执行完仍然显示cmd窗口。3、每个CMD 窗口要运行的命令,用“”标记起来,分行用 && 二、上面的例子效果是,同时打开2个CMD窗口,分别ping两个IP。三、附start命令的参数说明:D:\>start /?启动一个单独的窗口运行指定的...
CMD下如何修改注册表?
一、CMDcmd 是windows2000中的一个小得如鸽子蛋一样的程序,是一个所谓命令行控制台。有两条进入该程序的通道:第一,鼠标点击"开始->运行",在出现的编辑框中键入"cmd",然后点击"确定";第二,在启动windows2000的时候,按F8进入启动选择菜单,移动光条或键入数字至安全模式的命令行状态。出现的窗口是一个在win9x...
cmd中,如何给一个输入值定为变量,并如何调出变量?
你上面的语法是不正确的,必须严格按照CMD的语法来写语句,该有空格的地方一定要有空格!定义接受输入的变量: SET /P cho=请输入密码: 调用变量是用两个“%”界定就可以直接引用:echo 您输入的密码是%cho Windows 命令提示符(cmd.exe)是 Windows NT 下的一个用于运行 Windows 控制面板程序或...
有什么cmd命令能让电脑点击一个文件就会打开一个软件?
新建一个bat文件,比如qq的执行文件路径,然后把你的软件执行文件路径写进去(C盘的路径较长,路径要加双引号(要用英文格式输入,不能在拼音输入法的位置输入),双击即可打开
想让命令行(cmd.exe)执行一个命令怎么办
接下来我们看看taskkill这个命令,这个命令的作用是结束一个进程.后面的参数会随需而变, 参数就是想要结束的进程进程名, 可以简单的将进程的名字写在批处理里面, 象这样:taskkill /im winword.exe 这样当我们执行这个批处理的时候,就可以结束微软的word字处理程序. 但是这样缺少灵活性, 结束不同进程需要...