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
==>