bat文件不正确

时间:2014-12-05 13:22:08

标签: batch-file

我有一个带有脚本的.bat文件,该脚本计算数据库中的记录并将其保存到文件中。之后我比较文件。如果保存的记录等于导出的* .csv文件。

在这种情况下,我的文件编号正确。 csv文件也有相同的数字但不在变量中。

第二个问题是来自我创建的文件的数字在末尾有一个空格,但我在文件中看不到任何内容。

chcp 1252
sqlcmd -S SQLSERVER\SQlINSTANZ -U User Id -P UserPass -d dbTable -s"" -Q "SET NOCOUNT ON; SELECT COUNT(*) FROM sync_Winkey" -h -1 -o "\\SERVERNAME\g$\Path\to\counter1.txt"


@ECHO OFF
setlocal EnableDelayedExpansion
for /f "tokens=1 delims= " %%b in (\\SERVERNAME\g$\Path\to\counter1.txt) do set temp_records=%%b 
  ::echo %temp_records%

for /l %%a in (1,1,100) do if "!temp_records:~0,-1!" == "s/" set temp_records=!temp_records:~0,-1! 

setlocal EnableDelayedExpansion
for /f "tokens=4 delims== " %%c in (\\SERVERNAME\g$\Path\top\file.csv) do set /A "winkeyFile+=1"
echo %winkeyFile% 

@ECHO ON

IF "%temp_records%" == "%winkeyFile% " GOTO CopyFile
goto:fail

:CopyFile
ECHO %date%
ECHO Daten wurden kopiert:
ECHO %time% Successfully copied. %winkeyFile% records copied
ECHO -----------------------------
PAUSE
goto:eof

:fail
PAUSE
goto:eof

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

1)空间不在文件中。该空间位于代码中,位于变量赋值的末尾

....) do set temp_records=%%b 
                             ^ here 

更好地将线路更改为

for /f %%b in ("\\SERVERNAME\g$\Path\to\counter1.txt") do set "temp_records=%%b"

或者,如果文件中的唯一数据是数字,

<"\\SERVERNAME\g$\Path\to\counter1.txt" set /p "temp_records="

2)winkeyFile没有初始化。它可以是0,也可以不是

3)如果使用指示的.csv循环重新for文件,则任何缺少其中第4个标记的行都不会被计算在内。更好地使用

for /f %%b in ('
    find /c /v "" ^< "\\SERVERNAME\g$\Path\top\file.csv"
') do set "winkeyFile=%%b"

答案 1 :(得分:0)

for /f "tokens=1 delims= " %%b in (\\SERVERNAME\g$\Path\to\counter1.txt) do set temp_records=%%b 

此行有一个尾随空格。因此,temp_records将被设置为&#34; somenumber Space &#34;

将此更改为

for /f "tokens=1 delims= " %%b in (\\SERVERNAME\g$\Path\to\counter1.txt) do set "temp_records=%%b"



  ::echo %temp_records%

for /l %%a in (1,1,100) do if "!temp_records:~0,-1!" == "s/" set temp_records=!temp_records:~0,-1! 

我不知道你用这条线试图完成什么。它说:&#34;如果temp_records的内容除了最后一个字符是s/,那么删除最后一个字符,然后执行100次。&#34;

请注意,该行上还有一个尾随空格,所以......并添加一个空格。

这意味着(如果最后的...并添加了空格),如果内容为s/?,请将其替换为s/ - 执行100次。

这个值应该是数字吗?你没有提供例子......