使用BAT文件时如何向CMD输入命令?

问题描述 投票:-2回答:1

我正在尝试创建一个.bat文件,它将目录中的每个.txt文件转换为使用.csvlogparser文件。

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

我遇到的问题是,我是echoing整个命令,但它没有执行。

我需要执行这个命令:

logparser "SELECT * INTO filename FROM filename" -I:txt -o:csv
batch-file scripting windows-scripting
1个回答
0
投票

以下是我的各种评论作为答案。

如果你指定%%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

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

© www.soinside.com 2019 - 2024. All rights reserved.