使用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应该代入docommand!

它基本上是这样的,'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

注意:
包含空格或特殊字符的文件名需要特别注意引用
.