0

所以我有这段代码用于在主目录的复杂子目录中对文件进行排序:

@ECHO OFF
SETLOCAL

SET relroot=g:\Pictures\Uda 18
(SET relroot=g:\Pictures\Uda 18)
SET "relroot=g:\Pictures\Uda 18"

SET "destdir=g:\Pictures\Uda 18\Sets"

:again
(SET artist=)
SET /p artist="Artist? "

IF NOT DEFINED artist GOTO :eof

MD "%destdir%\%artist%" 2>nul

FOR /f "delims=" %%i IN ( 
   ' dir /s /b /a-d "%relroot%\*%artist%*" '
   ) DO (
>>undo.txt ECHO %%i^|%destdir%\%artist%\%%~nxi
MOVE "%%i" "%destdir%\%artist%\%%~nxi" >nul)
)

GOTO again

它接受输入,搜索目录“Uda 18”及其中的所有内容,并将名称中包含输入的所有文件移动到目录“Uda 18/Sets”下以输入命名的文件夹中。但是,粗心的测试导致我从“Uda 18/Sets”中提取文件,这些文件的名称意味着它们无法使用批处理重新组织。为避免这种情况,我需要从获取文件的位置排除“Uda 18/Sets”,但我找不到方法。正如标题所要求的那样;是否可以跳过选择子目录,如果可以,如何?

4

4 回答 4

0

就个人而言,我更喜欢在源目录之外创建一个目标目录,而不是在:

source:        g:\pictures\uda 18\xxx
destination:   g:\pictures\sorted\uda 18\xxx

这样,您不仅可以避免该问题,还可以始终拥有清晰一致的目录结构

于 2013-04-28T11:08:20.050 回答
0

试试这个来绘制除“sets”文件夹中的文件名之外的文件名:

dir /b /s /a-d "uda 18" | find /v /i "sets"

...以及您的文件夹:

echo "%destdir%\%artist%" | find /v /i "sets" >nul && goto:createFolder || goto:eof
于 2013-04-28T10:58:19.857 回答
0

我也会将我的目标文件夹与要处理的文件夹分开。

不过,将其移出并稍后移回是一种选择。

move "g:\Pictures\Uda 18\Sets" "g:\Pictures"
do your other commands here
move  "g:\Pictures\Sets" "g:\Pictures\Uda 18"
于 2013-04-28T11:47:54.727 回答
0
FOR /f "delims=" %%i IN ( 
   ' dir /s /b /a-d "%relroot%\*%artist%*" ^|findstr /v /i /b /c:"%destdir%\\"'
   ) DO ( ECHO MOVE "%%i" "%destdir%\%artist%\%%~nxi")

应该列出要执行的 MOVE排除/v任何以不区分大小写/b开头的整个字符串,包括空格...其中转义的目录,因此不包括“g:\Pictures\Uda 18\Sets”及其任何子目录(完整文件名开始的地方/i/c:\\g:\Pictures\Uda 18\Sets\"

只需删除/v即可选择ONLY匹配的文件"g:\Pictures\Uda 18\Sets"及其子目录。

于 2013-04-28T11:50:17.547 回答