有一些文件夹,如何查看文件夹或文件名组成的编号?
如果文件夹或文件名如1123456
并显示“成功”;如果文件夹或文件名如asd2334
并显示“失败”。
答案 0 :(得分:1)
findstr /r "^[0-9][0-9]*$"
可能会对某些非数字字符产生误报。为什么?阅读FINDSTR支持的所有字符的完整列表,按照FINDSTR用于在What are the undocumented features and limitations of the Windows FINDSTR command中建立正则表达式字符类范围的归类序列进行排序。不同代码页的示例:
==> chcp 852>NUL ==> echo řźČ|findstr /r "^[0-9][0-9]*$" řźČ ==> chcp 850>NUL ==> echo ²½¼|findstr /r "^[0-9][0-9]*$" ²½¼ ==> chcp 737>NUL ==> echo ²τυ|findstr /r "^[0-9][0-9]*$" ²τυ ==>
复杂的脚本:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_folder=D:\test\SO\45729489"
pushd "%_folder%"
echo(
echo ### false positives from `findstr`:
for %%G in (*) do (
echo %%~nG|findstr /r "^[0-9][0-9]*$" >nul
if errorlevel 1 (
echo findstr NoNumeric %%~G
) else (
echo findstr numerical %%~G
)
)
echo(
echo === right way: `for /F "delims=0123456789"`
for /F "delims=" %%G in ('2^>NUL dir /B') do (
set "_NoNumber="
for /f "delims=0123456789" %%g in ("%%~nG") do set "_NoNumber=%%~g"
if defined _NoNumber (
echo for /F NoNumeric %%~G
) else (
echo for /F numerical %%~G
)
)
popd
输出(在CHCP 852
范围内运行):
==> D:\bat\SO\a45729489.bat ### false positives from `findstr`: findstr numerical 457294890.txt findstr NoNumeric 45729489A.txt findstr numerical 45729489Č.txt findstr numerical 45729489ř.txt findstr numerical 45729489ź.txt === right way: `for /F "delims=0123456789"` for /F numerical 457294890.txt for /F NoNumeric 45729489A.txt for /F NoNumeric 45729489Č.txt for /F NoNumeric 45729489ř.txt for /F NoNumeric 45729489ź.txt ==>
资源(必读):
%~nG
等特殊页面)Command Line arguments (Parameters) >NUL
,2>&1
等特殊页面)Redirection ^
中的2^>NUL
Circumflex Accent Escape Characters, Delimiters and Quotes {/ 3}} 答案 1 :(得分:0)
答案 2 :(得分:0)
一种方法是使用带有所有数字的for / f作为分隔符。 如果测试的var中没有剩余,则为数字。
> type IsNumber.cmd
@Echo off
:loop
set "value="
set /p value=input value:
if "%value%" equ "" exit /B
set "test="
for /f "delims=0123456789" %%A in ("%value%") Do set "test=%%A"
Echo value=%value%^<
echo test =%test%^<
if "%test%" equ "" (echo %value% is a number) else (Echo %value% is not a number)
goto :loop
如果用作返回错误级别的子程序,则可以轻松地将其合并到批处理中。
@Echo off
For %%A in (1234 one 5a6 456 897) do (
Call :IsNumber "%%~nA" && (Echo Is a number: %%A) || (Echo not a number: %%A)
)
Goto :Eof
:IsNumber
Set Ret=0
for /f "delims=0123456789" %%A in ("%~1") Do set Ret=1
Exit /B %Ret%
示例输出:
Is a number: 1234
not a number: one
not a number: 5a6
Is a number: 456
Is a number: 897
要获得for process dir输出,您需要for /f
变体:
For /f "tokens=*" %%A in ('Dir /B/AD ') do (
答案 3 :(得分:0)
此批处理脚本将循环遍历目录中的*.txt
个文件。
检查文件名是否为数字,它将回显 Successfull ,否则失败
@echo off
setlocal enabledelayedexpansion
for %%f in ("C:\Test\*.txt") do (
echo %%~nf| findstr /r "^[1-9][0-9]*$">nul
if !errorlevel! equ 0 (
echo %%~nf ---------------------------------------------------- Successful
)else (echo %%~nf ---------------------------------------------------- Failed)
)
pause