Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何按批处理文件检查文件名表单是否为编号?_Batch File - Fatal编程技术网

Batch file 如何按批处理文件检查文件名表单是否为编号?

Batch file 如何按批处理文件检查文件名表单是否为编号?,batch-file,Batch File,有一些文件夹,我怎样才能检查文件夹的文件名或文件名的组成数 如果文件文件夹或文件名如1123456并显示成功;如果文件文件夹或文件名如asd2334和show失败。一种方法是使用for/f和所有数字作为分隔符。 如果测试的var没有留下任何内容,则它是一个数字 > type IsNumber.cmd @Echo off :loop set "value=" set /p value=input value: if "%value%" equ "" exit /B set "test=" f

有一些文件夹,我怎样才能检查文件夹的文件名或文件名的组成数


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

一种方法是使用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
样本输出:

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变量:


此批处理脚本将循环遍历目录中的*.txt文件。 检查文件名,如果其编号为,则将成功回送,否则将失败

findstr/r^[0-9][0-9]*$可能会为某些非数字字符提供误报。为什么?阅读FINDSTR支持的所有字符的完整列表,按照FINDSTR用于在中建立正则表达式字符类范围的排序规则序列进行排序。不同代码页的示例:

复杂脚本:

@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范围内的输出运行:

所需资源阅读:

命令参考 其他特殊性 %~nG等特别页面 >NUL、2>&1等特殊页面 ^扬抑重音在2^>NUL中
感谢您的解决方案,它看起来像检查文件名到数字。有可以检查文件夹名称的吗?感谢您的解决方案,downer one运行后没有响应,有什么我需要做的吗?是否可以检查文件夹名?这取决于传递给sub:IsNumber的参数,如果它不是一个数字,它将返回errorlevel 1。我将更改第二批以使其更清晰。您好,我将1234 one 5a6 456 897更改为'dir/b/ad'以获取文件夹列表,但它仅获取dir,/b/ad。我如何检查文件夹名称?我在我的答案中添加了一个适当的for来解析dir输出。我尝试在1234中为%%a更改一个5a6 456 897 do to for/f标记=%a in'dir/b/ad'do。但运行后没有响应,我需要做什么吗?它会显示出来裝置未就緒。 谷歌翻译:设备还没有准备好。一开始。我需要做一些事情吗?更改set\u folder=D:\test\SO\45729489行以满足您的情况。
For /f "tokens=*" %%A in ('Dir /B/AD ') do (
@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
==> 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
==> 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

==>