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_Drag And Drop - Fatal编程技术网

Batch file 批处理文件:拖放文件夹和文件(某些文件类型和递归)

Batch file 批处理文件:拖放文件夹和文件(某些文件类型和递归),batch-file,drag-and-drop,Batch File,Drag And Drop,我试图将文件夹和文件都拖到批处理文件上,并希望仅在目录/子目录包含这些文件类型时处理文件类型.flac.mp3.acc 递归处理也是我所追求的 目录树看起来像: Z:\Music\ | 03 - I Love You (Booka Shade Remix).mp3 | 02 - Towers.mp3 | +---Woodkid - 2013 - I Love You [FLAC] | cover.jpg | 02 - Towers.flac | 01

我试图将文件夹和文件都拖到批处理文件上,并希望仅在目录/子目录包含这些文件类型时处理文件类型
.flac.mp3.acc

递归处理也是我所追求的

目录树看起来像:

Z:\Music\
|   03 - I Love You (Booka Shade Remix).mp3
|   02 - Towers.mp3
|
+---Woodkid - 2013 - I Love You [FLAC]
|       cover.jpg
|       02 - Towers.flac
|       01 - I Love You.flac
|       03 - I Love You (Booka Shade Remix).flac
|
+---No FLAC, MP3 or ACC folder
|       cover.jpg
|
\---Woodkid - 2013 - I Love You [MP3]
|       cover.jpg
|       01 - I Love You.mp3
|       02 - Towers.mp3
|       03 - I Love You (Booka Shade Remix).mp3
|
\---Woodkid - 2013 - I Love You [ACC]
|        cover.jpg
|        01 - I Love You.acc
|        02 - Towers.acc
|        03 - I Love You (Booka Shade Remix).acc
我想用数字顺序处理上面的目录树

Processing Directory: Z:\Music\
   Processing File: 1 - 02 - Towers.mp3
   Processing File: 1 - 03 - I Love You (Booka Shade Remix).mp3
Processing Directory: Woodkid - 2013 - I Love You [FLAC]
   Processing File: 1 - 01 - I Love You.flac
   Processing File: 1 - 02 - Towers.flac
   Processing File: 1 - 03 - I Love You (Booka Shade Remix).flac
Processing Directory: Woodkid - 2013 - I Love You [MP3]
   Processing File: 1 - 01 - I Love You.mp3
   Processing File: 1 - 02 - Towers.mp3
   Processing File: 1 - 03 - I Love You (Booka Shade Remix).mp3
Processing Directory: Woodkid - 2013 - I Love You [ACC]
   Processing File: 1 - 01 - I Love You.acc
   Processing File: 1 - 02 - Towers.acc
   Processing File: 1 - 03 - I Love You (Booka Shade Remix).acc
我曾尝试在来自的帮助下使其工作,但这仅适用于单一文件类型

编辑:我的尝试。代码中的注释和问题:

@echo off
FOR %%I IN (%*) DO (
    ECHO.%%~aI | FIND "d" >NUL
    IF ERRORLEVEL 1 (
        :: Processing Dropped Files
        :: Only need folder (%%~dpI) to repeat once, this repeats for every dropped file.
        echo %%~dpI
        :: Would be nice if I could set a variable for file types at beginning of script
        for /f "tokens=*" %%I in ('DIR /B/OGDN "%%~nI.flac" "%%~nI.mp3" "%%~nI.acc" 2^>NUL') DO (
            echo   Processing File: %%I
            )
        ) ELSE (
        :: Processing Dropped Folders
        :: Need the directory echod here (just once).
        :: Don't know how to process flac mp3 or acc files within the dropped folder recursively.
        :: Be nice if I could set a variable for file types here too.
        )
        )
@pause

如果它仅用于一些扩展,则应该这样做。如果您有许多扩展,那么构建一个列表并运行单个
if
语句会更容易

@echo off
for /f "tokens=*" %%i in ('dir /b /a-d /s %*') do (
  if "%%~xi"==".flac" echo "%%i"
  if "%%~xi"==".mp3" echo "%%i"
  if "%%~xi"==".acc" echo "%%i"
 )
pause
显然,您将用实际命令替换echo

编辑

这不会很快,因为它有3个循环,但应该可以工作

@echo off
set "list=.flac .mp3 .aac"
for %%a in (%*) do (
if exist .\nul @echo Processing Directory: %%a
 for /f "tokens=*" %%i in ('dir /b /a-d /s %*') do (
   for %%j in (%list%) do (
    if "%%~xi"=="%%j" echo File Type is %%j - Processing file: "%%i"
   )
  )
 )
pause

如果您只想在
处理文件:
部分显示文件名,只需将
%%i
更改为
%%~nxi

,以包含您“试图让”工作的代码,并解释运行它时发生的与您的意图相反的情况。这不是一个免费的脚本编写服务,你的问题是离题的,除非你告诉我们你的尝试!在起始帖子中添加了尝试代码。谢谢。我在
for/f“tokens=*”%%I in('dir/b/a-d/s%*)do()
中没有接近让
%*
工作。如何构建列表并运行单个if语句?我不知道该怎么做。我一直在寻找解决办法,但一无所获。另外,我如何才能将目录输出到cmd,就像起始帖子一样,只输出一次,而不是针对文件夹中的每个文件?我对它进行了编辑,以显示我的尝试,同时还记录了哪些地方出了问题。谢谢。@StephenSherry你完全复制了我的代码吗?如果你这么做了,那就行了。该脚本处理拖动到批处理文件的每个目录以及实际文件。我们可以做一个列表,但请尝试通过复制代码来实现这一点。我做到了,谢谢。它起作用了。它不会按照起始文章结构回显文件夹名和文件名。此外,该列表将是有用的,因为每个文件都是用相同的代码处理的。我也没有得到报酬做每件事。因此,我只是在帮助你朝着正确的方向前进当我说它工作(它确实工作)只是没有预期的。标题不能满足我在尝试让它工作时遇到的所有问题。谢谢你的帮助。