批处理文件如何过滤文件名以某些字符开头

时间:2017-12-01 02:40:35

标签: batch-file

如果文件名以ABC0开头我想复制文件...(长度不固定), 但我使用下面的代码,它复制甚至我的文件名就像ABCUnit001意味着从ABCU开始。

setlocal enabledelayedexpansion
for %%x in (*.txt) do (
set filename=%%~nx


    if not "!filename=:~0,4!"=="ABC0" ( 
    copy "%%x" "destination path"
    move "%%x" "Destination path"
    )

)

任何人都可以帮忙吗?谢谢和欣赏

1 个答案:

答案 0 :(得分:1)

根据您的需要调整此代码,尤其是硬编码的TargetPath

@for %%x in (*.txt) do @call :MoveIt %%x
@exit /b 0

:MoveIt
@set filename=%1
@set filename=%filename:~0,4%
@if /i "%filename%" == "ABC0" @move "%1" "TargetPath"
@exit /b

要诊断原始代码,请尝试以下操作:

@setlocal ENABLEDELAYEDEXPANSION
@set prompt=$G
@for %%x in (*.txt) do @(
    @set filename=%%~nx
    @echo filename==%filename%
    @echo %%~nx
    @echo %%x
)

我认为%% ~nx没有按照您的预期进行,%filename%为空。 %% ~nx是没有扩展名的文件名。不确定你可以在if语句中使用范围表示法。我只看到它使用/使用set命令,这是我所知道的唯一记录的用法。我总是通过将代码转换为子程序调用来避免嵌入多行块。

相关问题