从命令窗口执行并双击bat文件时,Windows .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
)
)
当我通过打开命令窗口并调用它来运行它时,
答案 0 :(得分:3)
您的代码中存在一些问题
cd d:\My_test
仅在D:
使用时才有效,您可以在此使用cd /d
或pushd
。
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
)
答案 1 :(得分:0)
以jeb的答案为基础。
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
)
)