2013-12-10 74 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% 
相關問題