如何在文件中搜索字符串?批处理按内容移动指定文件
批处理文件扩展:按文件内容分类移动.print_job文件
嘿,Roy,你已经搞定了定位目标文件的第一步,接下来咱们把按内容分类移动的逻辑补上就行。核心思路就是对每个找到的.print_job文件,用findstr命令检查是否包含指定关键词,再根据结果执行移动操作。
完整代码示例
@echo off setlocal EnableDelayedExpansion :: 先确保所有目标目录存在,避免移动时出错 if not exist "C:\Folder1" mkdir "C:\Folder1" if not exist "C:\Folder2" mkdir "C:\Folder2" :: 替换成你实际的SPI目标目录 set "SPI_TARGET_DIR=C:\Your_SPI_Folder" if not exist "!SPI_TARGET_DIR!" mkdir "!SPI_TARGET_DIR!" for %%I in (C:\test\*.print_job.*) do ( set "CURRENT_FILE=%%I" set "FILE_NAME=%%~nxI" :: 检查文件是否包含MOUNT(优先处理,顺序决定匹配优先级) findstr /i "MOUNT" "!CURRENT_FILE!" >nul if !errorlevel! equ 0 ( echo 移动文件 !FILE_NAME! 到 C:\Folder1 move "!CURRENT_FILE!" "C:\Folder1\" goto next_file :: 找到匹配后跳过后续检查 ) :: 检查文件是否包含PROD findstr /i "PROD" "!CURRENT_FILE!" >nul if !errorlevel! equ 0 ( echo 移动文件 !FILE_NAME! 到 C:\Folder2 move "!CURRENT_FILE!" "C:\Folder2\" goto next_file ) :: 检查文件是否包含SPI findstr /i "SPI" "!CURRENT_FILE!" >nul if !errorlevel! equ 0 ( echo 移动文件 !FILE_NAME! 到 !SPI_TARGET_DIR! move "!CURRENT_FILE!" "!SPI_TARGET_DIR!\" goto next_file ) :: 可选:处理不匹配任何关键词的文件,比如移到默认目录 :: if not exist "C:\Unmatched_Files" mkdir "C:\Unmatched_Files" :: move "!CURRENT_FILE!" "C:\Unmatched_Files\" :next_file ) pause
关键细节说明
findstr /i参数:/i表示忽略大小写匹配,如果你需要严格区分大小写,去掉这个参数即可。errorlevel判断逻辑:findstr找到匹配内容时会返回errorlevel 0,未找到则返回非0值,以此作为判断依据。- 目录预创建:用
if not exist ... mkdir提前创建目标目录,避免move命令因目录不存在报错。 - 匹配优先级:通过
goto next_file在找到第一个匹配关键词后跳过后续检查,如果你希望一个文件匹配多个关键词时被多次处理(通常不需要),可以删掉goto语句。 - SPI目录自定义:记得把
set "SPI_TARGET_DIR=C:\Your_SPI_Folder"里的路径替换成你实际需要的目录。
如果后续要添加更多关键词分类,直接复制一段findstr检查逻辑,调整关键词和目标目录就可以啦。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

