如何检查文件名表单是否按批处理文件?

时间:2017-08-17 07:54:12

标签: batch-file

有一些文件夹,如何查看文件夹或文件名组成的编号?

如果文件夹或文件名如1123456并显示“成功”;如果文件夹或文件名如asd2334并显示“失败”。

4 个答案:

答案 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

==>

资源(必读):

答案 1 :(得分:0)

您可以使用findstr和正则表达式检查数字[0-9]的文件名。

看看这个:Batch - Compare variable with regular expression

这会帮助你自己写一个。

答案 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