所以我有这个代码用于在主目录中的子目录中复制文件:
@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',但我找不到办法。所以标题要求;是否可以跳过select子目录,若然,怎么做?
答案 0 :(得分: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
答案 1 :(得分:0)
就个人而言,我更喜欢创建目的地目录BESIDES源目录,而不是:
source: g:\pictures\uda 18\xxx
destination: g:\pictures\sorted\uda 18\xxx
这样你不仅可以避免这个问题,而且还会有一个清晰一致的目录结构
答案 2 :(得分:0)
我也会将目标文件夹与要处理的文件夹分开。
将它移出并稍后移回它是一个选择。
move "g:\Pictures\Uda 18\Sets" "g:\Pictures"
do your other commands here
move "g:\Pictures\Sets" "g:\Pictures\Uda 18"
答案 3 :(得分: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
开始/i
不区分大小写/c:
整个字符串包括空格...其中{{1} } escapes \
因此排除“g:\ Pictures \ Uda 18 \ Sets”及其任何子目录(完整文件名将从\
开始
只需删除g:\Pictures\Uda 18\Sets\"
即可选择/v
ONLY
及其子目录中的匹配文件。