在循环文件夹路径中使用通配符

时间:2018-07-17 09:18:41

标签: batch-file for-loop

我有一批正在整理不同文件夹中的图片。哪个工作正常

@echo off
for %%a in (*.jpg) do (
   echo processing "%%a"
      for /f "tokens=1,2 delims=$" %%b in ("%%~nxa") do (
         move "%%a" "K:\folder\subfolder\subfolder\%%b/subfolder/%%c" >nul
      )
)

现在我需要更改一下,但是它不想工作。因此jpg的第一部分只是子文件夹名称的一部分,其余部分未知。

批处理将是这样的:

@echo off
for %%a in (*.jpg) do (
   echo processing "%%a"
      for /f "tokens=1,2 delims=$" %%b in ("%%~nxa") do (
         move "%%a" "K:\folder\subfolder\subfolder\%%b*/subfolder/%%c" >nul
      )
)

例如,我想移动图片:abc$pic1.jpg

K:\folder\subfolder\subfolder\abc12345\subfolder\pic1.jpg

因此,我可能确实需要使用*而不是12345。始终有一个abc目标文件夹,但我不知道结尾是什么。

1 个答案:

答案 0 :(得分:1)

首先,不要使用/作为路径分隔符,在Windows中是\

通配符只能在路径的最后一个元素中使用,因此不能使用诸如K:\folder\subfolder\subfolder\abc*\subfolder\pic1.jpg之类的东西。

您可以在move命令行周围包裹一个for /D loop,如下所示:

@echo off
for %%a in ("*.jpg") do (
    echo processing "%%~a"
    for /F "tokens=1,2 delims=$" %%b in ("%%~nxa") do (
        for /D %%d in ("K:\folder\subfolder\subfolder\%%b*") do (
            move "%%~a" "%%~d\subfolder\%%c" > nul
        )
    )
)