我有一个带有脚本的.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
答案 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次。
这个值应该是数字吗?你没有提供例子......