最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】尝试让windows中的cmd中一个命令的输出作为另外一个命令的输入且是传递到参数中间的

Windows crifan 7337浏览 0评论

【背景】

折腾:

【记录】尝试给右键打开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命令行高级教程精选合编

试了半天:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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)

去试试。

1
2
3
4
5
6
7
8
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

去试试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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参数:

1
2
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%

而不是预想的日期的值。

但是,试了第二次,结果就可以了:

cmd open mintty also create datetime log file

即,用:

1
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参数:

origin run cygwin is only mintty e para

现在去添加变为:

1
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'"

即:

change runcygwin to set value then run mintty

然后,再去测试一下:

for crosstoolng build dir do runcygwin

效果是:

找不到应用程序

can not find app

难道是command的值,太长了?(刚才在regedit中,都无法显示全。。。)

7.重新把值,改短点:

1
set DN=%date% && set TN=%time% && set CURLOG=%DN:~,4%%DN:~5,2%%DN:~8,2%_%TN:~,2%%TN:~3,2%%TN:~6,2%%TN:~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'"

结果还是无法显示完全:

can not show all command content

再去改短:

1
set DN=%date% && set TN=%time% && set CURLOG=%DN:~,4%%DN:~5,2%%DN:~8,2%_%TN:~,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'"

还不行。

再短:

1
set DN=%date% && set CURLOG=%DN:~,4%%DN:~5,2%%DN:~8,2%.log && mintty --log=E:\%CURLOG% -e bash -c "/bin/xhere /bin/bash.exe '%L'"

看看不给mintty和bash加路径,是否可以找到:

结果效果依旧,还是上面的错误:找不到应用程序

所以,看来是不识别set?还是不识别此处不加路径的mintty。

8.加上路径,再试试:

1
set DN=%date% && set CURLOG=%DN:~,4%%DN:~5,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'"

可以显示完整,然后看看能否运行。

结果还是:找不到应用程序

9.去cmd中,试试此处上面的命令:

1
set DN=%date% && set CURLOG=%DN:~,4%%DN:~5,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'"

结果也是之前类似错误:

还是只能创建%CURLOG%的log文件,而不是真正的值。

看来是此处,对于变量不识别。

10.后续针对多个命令同一行执行,参考了:

How to run two commands in one line in Windows CMD?

去试了试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Users\Administrator.PC-20130611GART>set DTN=%date% && set CURRENTLOG=%DTN:~,4%%DTN:~5,2%.log && echo %CURRENTLOG%
%CURRENTLOG%
 
C:\Users\Administrator.PC-20130611GART>set DATEN=%date% & set CURRENTL=%DATEN:~,4%%DATEN:~5,2%.log & echo %CURRENTL%
%CURRENTL%
 
C:\Users\Administrator.PC-20130611GART>set DATEN1=%date% | set CURRENTL1=%DATEN1:~,4%%DATEN1:~5,2%.log | echo %CURRENTL1%
%CURRENTL1%
 
C:\Users\Administrator.PC-20130611GART>set DATEN2=%date% & set CURRENTL2=%DATEN2:~,4%%DATEN2:~5,2%.log & echo %CURRENTL2%
%CURRENTL2%
 
C:\Users\Administrator.PC-20130611GART>set DATEN3=%date% & echo %DATEN3%
%DATEN3%
 
C:\Users\Administrator.PC-20130611GART>set DATEN4=%date% && echo %DATEN4%
%DATEN4%
 
C:\Users\Administrator.PC-20130611GART>set DATEN5=%date% , echo %DATEN5%
 
C:\Users\Administrator.PC-20130611GART>set DATEN6=%date% ; echo %DATEN6%
 
C:\Users\Administrator.PC-20130611GART>set DATEN7=%date%
 
C:\Users\Administrator.PC-20130611GART>echo %DATEN7%
2013/09/07 周六
 
C:\Users\Administrator.PC-20130611GART>

对此,官网:

在单个行上的多个命令可能无法运行,当您使用 & & 命令分隔符

也解释了。

 

11.参考了:

How to execute multiple commands in a single line

再去试试,果然是:

1
2
3
4
5
6
7
C:\Users\Administrator.PC-20130611GART>set DATEN8=%date% & echo %DATEN8% & echo %DATEN8%
%DATEN8%
%DATEN8%
 
C:\Users\Administrator.PC-20130611GART>set DATEN8=%date% & echo %DATEN8% & echo %DATEN8%
2013/09/07 周六
2013/09/07 周六

即,第一次不会显示,之后才会显示。

感觉像是bug。。

12.参考:

run two commands in one windows cmd line, one command is SET command

去试试CALL:

的确可以了:

1
2
C:\Users\Administrator.PC-20130611GART>set DATEN9=%date% & CALL echo %DATEN9%
2013/09/07 周六

13.所以,再去试试:

1
2
3
C:\Users\Administrator.PC-20130611GART>set DATETIME1=%date% && CALL set CURLOGFILE1=%DATETIME1:~,4%%DATETIME1:~5,2%.log && CALL echo %CURLOG
FILE1%
201309.log

的确是可以了。

14.再去试试:

1
set DATETIME=%date% && CALL set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

好像和已有的

201309.log

冲突了。

把新的内容,append到原因的内容中了:

append to origin log file

15.所以,再去试试:

1
set DATENOW=%date% && CALL set TIMENOW=%time% && set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log CALL && E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

好像还是没有创建想要的log文件。

汗,原来是漏掉一个call,去改为:

1
set DATENOW=%date% && CALL set TIMENOW=%time% && CALL set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

0401532 log  No such file or directory

16.再去试试:

1
set DATENOW=%date% && call set TIMENOW=%time% && call set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%.log && call E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

0381234.log: No such file or directory

再试试:

1
set DATENOW=%date% && call set TIMENOW=%time% && call set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%.log && E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

0.log: No such file or directory

再试试:

1
set DATENOW=%date% & call set TIMENOW=%time% & call set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%_%TIMENOW:~,2%.log & call E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果还是:

0.log: No such file or directory

再试:

1
set DATENOW=%date% & call set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%.log & call E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果错误依旧。

17.再试试之前正常的:

1
set DATETIME=%date% && CALL set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

然后是正常的,且可以得到log文件的:

E:\20130907.log

内容是刚才的命令输出。

接着是个加上time的:

1
set DATETIME=%date% && CALL set TIMENOW=%time% && CALL set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%_%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果是:

开始可以,多次执行,就找不到log了。

18。再去试试:

1
set DATETIME=%date% && CALL set TIMENOW=%time% && CALL set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果为:

找不到文件。

再试试:

1
set DATETIME=%date% && set TIMENOW=%time% && set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%%TIMENOW:~,2%%TIMENOW:~3,2%%TIMENOW:~6,2%%TIMENOW:~9,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果,

0533558.log: No such file or directory

貌似不能加time???

再次试试:

1
set DATETIME=%date% && CALL set CURLOGFILE=%DATETIME:~,4%%DATETIME:~5,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果不行。

再试:

1
set DATENOW=%date% && CALL set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果:可以创建:

201309.log

再试:

1
set DATENOW=%date% && CALL set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

结果:

没创建要的log文件。

在重新执行:

1
set DATENOW=%date% && CALL set CURLOGFILE=%DATENOW:~,4%%DATENOW:~5,2%%DATENOW:~8,2%.log && CALL E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\%CURLOGFILE% -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

才生成:

20130907.log

19.最终:

暂时貌似没法实现,给log文件加上动态的命令,获得当前日期和时间。

暂时只能固定为,设置注册表值为:

1
E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\dev_install_root\cygwin\home\log\cygwin_mintty_log.txt -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

然后通过RunCygwin,是可以:

自动创建对应的log文件:

E:\dev_install_root\cygwin\home\log\cygwin_mintty_log.txt

的,且:

每次重新启动一个Cygwin,然后就会TRUC,即清空原先log文件,重新写入当前的log输出内容。

效果如下:

fix log file name can work

20.另外,尝试去使用环境变量试试:

手动新建一个环境变量:

CURRENTDATE=20130907

然后RunCygwin的command的值改为:

1
E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\dev_install_root\cygwin\home\log\%CURRENTDATE%.txt -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

看看是否正常。

结果只能生成:

E:\dev_install_root\cygwin\home\log\CURRENTDATE.txt

所以不是想要的。

但是cmd中,的确可以得到该变量的值的:

1
2
3
4
C:\Users\Administrator.PC-20130611GART>echo %CURRENTDATE%
20130907
 
C:\Users\Administrator.PC-20130611GART>

 

然后,算了,就用最后最简单的吧:

 

【总结】

去注册表中,将:

1
HKEY_CLASSES_ROOT\Directory\shell\RunCygwin\command

值设置为:

1
E:\dev_install_root\cygwin\bin\mintty.exe --log=E:\dev_install_root\cygwin\home\log\cygwin_mintty_log.txt -e E:\dev_install_root\cygwin\bin\bash -c "/bin/xhere /bin/bash.exe '%L'"

这样:

每次右键任意一个文件夹,选择RunCygwin,然后就

  • 调用mintty打开cygwin了;
  • 且定位到当前文件夹。
  • 且清空对应的log文件:E:\dev_install_root\cygwin\home\log\cygwin_mintty_log.txt
  • 且接下来的,所有的cygwin窗口的输出的内容,都自动保存到该log文件中;

注意:

如果另外再(通过右击选择RunCygwin或者独立打开Cygwin),都会导致清空该log文件,即,该log文件,只能记录最后一个打开的Cygwin的mintty的输出的内容

 

最后附上导出的注册表内容:

1
2
3
4
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\Directory\shell\RunCygwin\command]
@="E:\\dev_install_root\\cygwin\\bin\\mintty.exe --log=E:\\dev_install_root\\cygwin\\home\\log\\cygwin_mintty_log.txt -e E:\\dev_install_root\\cygwin\\bin\\bash -c \"/bin/xhere /bin/bash.exe '%L'\""

需要的自己另存为

runCygwin_WithMinttyLogFile.reg

然后双击运行即可。

转载请注明:在路上 » 【记录】尝试让windows中的cmd中一个命令的输出作为另外一个命令的输入且是传递到参数中间的

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 哇感谢楼主!我也想过这个问题,也折腾过挺长时间,但是远没有楼主这种毅力。 另外那个第二次才行的不是bug,应该是cmd的一个机制,就是预处理了这些命令,可以试试启动变量延迟来解决。
    snljty7年前 (2017-12-20)回复
85 queries in 0.258 seconds, using 22.21MB memory