使用BAT文件时如何在CMD中输入命令?
How can I input a command into CMD when using a BAT file?
我正在尝试创建一个 .bat
文件,它获取目录中的每个 .txt
文件并使用 logparser
将其转换为 .csv
文件。
logparser 的常用语法是:
logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv`
这是我目前的情况:
for /R %%x in (*.txt) do (echo logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv
我遇到的问题是我正在 echo
执行整个命令但它没有执行。
我需要执行这条命令:
logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv
以下是我的各种评论作为答案。
如果您指定 %%x
,则必须有一个原因。
即For
metavariable
in
something
do
a command with the metavariable
.
所以你的metavariable
应该代入do
的 command
!
它基本上是这样的,'for
每个 .txt
文件将其分配给 %%x
,(元变量),然后 do
a command on %%x
, (.txt 文件)'.
每个 filename.txt
将单独分配给 %%x
.
我猜 do
的命令是:
logparser "SELECT * INTO filename.csv FROM filename.txt" -i:txt -o:csv
考虑到 %%x
已分配给 filename.txt
,阅读 for
的帮助用法,即 for /?
,表明 %%~nx
已分配仅 filename
;您的命令可能应该如下所示:
logparser "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
此外,当从 for /?
读取输出时,您会注意到 for /R %%x in (*.txt) do...
递归工作,即分配给目录和所有子目录中的每个文件。
你的问题没有提到子目录,所以也许你需要将其更改为 for %%x in (*.txt) do...
。
所以把它们放在一起看起来更像这样:
for %%x in (*.txt) do logparser "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
要使 logparser
正常工作,它必须位于当前工作目录中,在本例中与您的 .txt
文件相同的目录 ,或在 %PATH%
变量中指定的目录中。
如果两者都不成立,那么您应该提供相对路径或完全指定的路径,例如:
for %%x in (*.txt) do "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
注意:
包含空格或特殊字符的文件名需要特别注意引用.
我正在尝试创建一个 .bat
文件,它获取目录中的每个 .txt
文件并使用 logparser
将其转换为 .csv
文件。
logparser 的常用语法是:
logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv`
这是我目前的情况:
for /R %%x in (*.txt) do (echo logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv
我遇到的问题是我正在 echo
执行整个命令但它没有执行。
我需要执行这条命令:
logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv
以下是我的各种评论作为答案。
如果您指定 %%x
,则必须有一个原因。
即For
metavariable
in
something
do
a command with the metavariable
.
所以你的metavariable
应该代入do
的 command
!
它基本上是这样的,'for
每个 .txt
文件将其分配给 %%x
,(元变量),然后 do
a command on %%x
, (.txt 文件)'.
每个 filename.txt
将单独分配给 %%x
.
我猜 do
的命令是:
logparser "SELECT * INTO filename.csv FROM filename.txt" -i:txt -o:csv
考虑到 %%x
已分配给 filename.txt
,阅读 for
的帮助用法,即 for /?
,表明 %%~nx
已分配仅 filename
;您的命令可能应该如下所示:
logparser "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
此外,当从 for /?
读取输出时,您会注意到 for /R %%x in (*.txt) do...
递归工作,即分配给目录和所有子目录中的每个文件。
你的问题没有提到子目录,所以也许你需要将其更改为 for %%x in (*.txt) do...
。
所以把它们放在一起看起来更像这样:
for %%x in (*.txt) do logparser "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
要使 logparser
正常工作,它必须位于当前工作目录中,在本例中与您的 .txt
文件相同的目录 ,或在 %PATH%
变量中指定的目录中。
如果两者都不成立,那么您应该提供相对路径或完全指定的路径,例如:
for %%x in (*.txt) do "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT * INTO %%~nx.csv FROM %%x" -i:txt -o:.csv
注意:
包含空格或特殊字符的文件名需要特别注意引用.