0

Windows .Bat 文件在从命令窗口执行和双击 bat 文件时表现不同。这是我的文件:

ECHO ON
del activity_ftp.log
cd D:\My_Test
IF EXIST united_ops*.csv (
for %%i in (united_ops*.csv) do (
set size=0
set /A size=%%~zi
echo %%i,%size%,397312,624640 > D:\My_Test\activity_ftp.log
)
)

当我通过打开命令窗口并调用它来运行它时,

4

2 回答 2

3

您的代码中存在一些问题。
cd d:\My_test仅当您打开时才有效D:,您可以使用cd /dpushd此处。

echo ...%size%不起作用,因为它在解析 for 块时扩展,而不是在执行时扩展。

if exist似乎是多余的,因为只有for %%i in ( united_ops*.csv)存在任何文件时才会扩展。

ECHO ON
setlocal EnableDelayedExpansion
del activity_ftp.log
pushd D:\My_Test
for %%i in (united_ops*.csv) do (
    set size=0
    set /A size=%%~zi         
    echo %%i,!size!,397312,624640 > D:\My_Test\activity_ftp.log
)
于 2012-06-13T20:49:30.040 回答
0

以杰布的回答为基础。

1)您的 FOR 循环可能会遍历许多与您的模式匹配的文件。但是您使用文件重定向的覆盖模式。每个找到的文件都会覆盖前一个文件的输出。您的最终输出文件永远不会超过一行。您可以使用 更改为附加模式>>,但有更好的方法。将整个循环括在括号中并在覆盖模式下使用>.

2)您将大小设置为0,然后将其设置为文件大小,然后在回显该行后不使用它。我怀疑你根本不需要这个变量,所以你不需要延迟扩展。

3)您在顶部删除的文件不包含路径信息,因此它可能没有从正确的文件夹中删除。即使是这样,也没有必要,因为无论如何您都是在覆盖模式下重定向。

4)您可以在 FOR 语句中包含路径,而不是更改当前目录。

ECHO ON
>"D:\My_Test\activity_ftp.log" (
  for %%i in ("d:\My_Test\united_ops*.csv") do (
    echo %%~nxi,%%~zi,397312,624640
  )
)
于 2012-06-13T22:00:53.967 回答