2013-12-10 75 views
0

我是批量脚本编程的新手,来自linux环境,必须在这里编写几个简单的脚本。我在制造工厂工作,当产品通过测试时,它将测试证书保存到局域网中。我们有几十种产品,但是管理人员希望能够在一天中的任意一点运行脚本,我们可以看到每个产品已经构建了多少个产品。我的方法是导航到保存这些测试证书的位置,并查看当前哪些测试证书已被修改。在批处理脚本中写入文件不起作用

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

@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命令查看计数变量是否被设置,它是。所以出于某种原因写入不起作用。它是创建一个空的文本文件,即使计数是一个整数...我有完全相同的代码工作在其他各种例子,但由于某种原因,两个不会。请帮忙!谢谢

+0

任何有关如何更有效地做到这一点的建议,将不胜感激。这是我写的第一批剧本,所以我正在将它拼在一起 – dge888

回答

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命令的一个功能。大多数批处理命令使用^"转义引号。

UPDATE

Wouter's answer标识与OP的原代码中的另一个可能的问题。上面的简化代码不会遇到这个问题。

+0

正是我在找的东西。非常感谢。我知道我使用的命令太多了。 – dge888

1

可能这可能是因为真的很低的数字+“>”,比如1>,会被批量解释为单独的命令吗?

Writing Numbers to a text file - batch file

我是新来的这一点,但也许你可以尝试写(这样的链接提示)

>mytextfile.txt echo %count% 

代替。

+0

+1,很好。这可能是原始代码的问题。 – dbenham

0

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

>J:\units_built\currently_built_productA.txt echo %count% 
相关问题