在批处理脚本中写入文件不起作用

时间:2013-12-10 17:47:33

标签: batch-file

我是批处理脚本的新手,来自Linux环境,并且必须在这里编写几个简单的脚本。我在一家制造工厂工作,当产品通过测试时,它会将测试证书保存到LAN上。我们有几十种产品,但是管理层希望能够运行一个脚本,在当天的任何特定时刻我们都可以看到每个产品的构建数量。我的方法是导航到保存这些测试证书的位置,并查看今天修改了哪些证书。

因此,以下脚本适用于几乎所有产品,但由于其中两个产品的某些原因,它不会将计数写入我指定的文件。

@echo off
setlocal 
set count=0

cd /D T:/"Product Name"/"Test Certificates"
for /f %%i in ('forfiles -m *.txt -d 0 /c "cmd /c echo @FILE"') do @call set /a count+=1

echo %count%>J:\units_built\currently_built_productA.txt
endlocal

我尝试将write命令输出来查看count变量是否被设置了。所以出于某种原因,写不起作用。它创建一个空文本文件,即使count是一个整数...我有完全相同的代码在其他各种例子中工作,但由于某种原因,两个不会。请帮忙!谢谢

3 个答案:

答案 0 :(得分:2)

我假设currently_built_productA是一个动态值。如果值包含空格,则代码将不会写入正确的位置。例如,echo Hello world>A B.txt将写入名为A的文件。解决方案是在输出文件名称周围加上引号:echo Hello world>"A B.txt"

您可以大大简化脚本。

@echo off
setlocal
set "product=SomeProduct"
forfiles /p "T:\%product%\Test Certificates" /m *.txt -d 0|find /c """" >"J:\units_built\%someProduct%.txt"

FORFILES的输出通过管道传递给FIND命令,该命令计算包含引号的行数。搜索字符串必须用引号括起来,引号文字必须通过加倍来转义。

请注意,将引号转义为""是FIND命令的一项功能。大多数批处理命令使用^"转义引号。

<强>更新

Wouter's answer确定了OP原始代码的另一个可能问题。上面的简化代码不会遇到这个问题。

答案 1 :(得分:1)

这可能是因为真的很低的数字+“&gt;”,如1&gt;例如,将被批量解释为单独的命令吗?

Writing Numbers to a text file - batch file

我是新手,但也许你可以尝试写作(如此链接所示)

>mytextfile.txt echo %count%

代替。

答案 2 :(得分:0)

问题可能是重定向 - 当某些数字紧跟>字符之前,例如1>2>(它吃掉数字)时,会失败。这将通过使用行前面的重定向来解决该问题:

>J:\units_built\currently_built_productA.txt echo %count%