eol^= 在这里应该是多余的。
在 %你的字符串% 前后加上一个 # 字符,一是防止 %你的字符串% 为空值而使得 do 语句不被执行,二是防止 %你的字符串% 出现以 ; 字符开头而使得 do 语句不被执行。
一般 for /f 写成这样子:
for /f "tokens=1* eol= delims=1234567890" %%a in ("%你的字符串%") do (...)
这样子貌似会忽略以空格开头的行,就是说 %你的字符串% 以空格开头,do 语句不会被执行。
我觉得改成这样可能会更好一点(输入双引号不会闪退):
@echo off
set /p str=输入数字:
for /f "tokens=1* delims=1234567890" %%a in ("#%str:"=""%#") do (
if "%%b" == "#" (echo 纯数字) else (echo 非纯数字或空值)
)