Windows 基于findstr移动目录内容

Windows 基于findstr移动目录内容,windows,powershell,batch-file,cmd,Windows,Powershell,Batch File,Cmd,使用windows 10,我想递归地浏览我的电影文件夹,并移动任何在其相关的nfo文件中写入了类型纪录片的电影。我的目录结构是: D:\Movie1 -Movie1.ext -Movie.nfo -Extrafanart\ D:\Movie2 -Movie2.ext -Movie.nfo -Extrafanart\ 所以,我想搜索将位于每个目录中的“movie.nfo”。如果它有纪录片类型,那么我想把整个目录移到一个新的位置。接下来我可以开始工作了,但我只能移动nfo文

使用windows 10,我想递归地浏览我的电影文件夹,并移动任何在其相关的nfo文件中写入了类型纪录片的电影。我的目录结构是:

D:\Movie1
  -Movie1.ext
  -Movie.nfo
  -Extrafanart\
D:\Movie2
  -Movie2.ext
  -Movie.nfo
  -Extrafanart\
所以,我想搜索将位于每个目录中的“movie.nfo”。如果它有纪录片类型,那么我想把整个目录移到一个新的位置。接下来我可以开始工作了,但我只能移动nfo文件,而不能移动目录的内容。我一直在想办法,但我想不出来:

for /F "tokens=*" %%I in ('findstr /i /s /m "<genre>Documentary</genre>" "D:\*.nfo"') do move "%%I" "E:\Documentaries\"
for/F“tokens=*”%%I in('findstr/I/s/m“documental”D:\*.nfo')移动“%%I”E:\Documentary\”
-编辑-

因此,我尝试使用powershell,我能够实现同样的目标,仅移动nfo,仍然无法移动nfo的目录和内容:

get-childitem F:\Downloads\Movies\ -filter Movie.nfo -recurse | select-string -list -pattern "<genre>Documentary</genre>" | move -dest E:\Documentaries\
get childitem F:\Downloads\Movies \-filter Movie.nfo-recurse |选择字符串-列表-模式“纪录片”|移动-目的地E:\documents\

以下是我的解决方案版本:

@ ECHO off

PUSHD %~dp0

CLS
CD Movies
FOR /D /r %%G IN ("*") DO (
    findstr /C:"<genre>Documentary</genre>" "%%~G\*.nfo" >nul && (
        ECHO "%%~G" is a Documentary!
        MOVE "%%~G" C:\Documentaries
    ) || (
        ECHO "%%~G" is NOT a Documentary!
    )
)

CD ..

POPD

以下是我的解决方案版本:

@ ECHO off

PUSHD %~dp0

CLS
CD Movies
FOR /D /r %%G IN ("*") DO (
    findstr /C:"<genre>Documentary</genre>" "%%~G\*.nfo" >nul && (
        ECHO "%%~G" is a Documentary!
        MOVE "%%~G" C:\Documentaries
    ) || (
        ECHO "%%~G" is NOT a Documentary!
    )
)

CD ..

POPD

由于电影名称往往有空格,您应该双引号引用包含
%%G
的所有引用,OP在
*.nfo
中使用了通配符,因此并非所有的.nfo都被命名为movie.nfo。我将move改为xcopy,您的代码与我的问题完全相同,只移动nfo文件。我想包括目录和目录中的任何其他文件。@Failstyle:您运行我的代码了吗?我已经在
Windows 7
(我没有Windows 10)上测试过它,它
将整个目录移动到
纪录片
。按原样运行代码,在它尝试移动文件时会拒绝访问。如果我以管理员的身份运行它,它会跳转到我的system32文件夹。如果我将move更改为xcopy,它只复制nfo文件。我有所有必要的管理员权限以及作为管理员运行cmd。我认为这与windows有关。@Failstyle:我已经更新了处理
system32
问题的代码。检查答案中的
PUSHD
POPD
。您现在可以
以管理员身份运行并验证。它现在应该可以工作了。由于电影名称往往有空格,你应该在
%%G
中双引号引用所有引用,OP在
*.nfo
中使用了通配符,因此并非所有的.nfo都被命名为movie.nfo。我将move改为xcopy,你的代码与我的问题完全相同,只移动了nfo文件。我想包括目录和目录中的任何其他文件。@Failstyle:您运行我的代码了吗?我已经在
Windows 7
(我没有Windows 10)上测试过它,它
将整个目录移动到
纪录片
。按原样运行代码,在它尝试移动文件时会拒绝访问。如果我以管理员的身份运行它,它会跳转到我的system32文件夹。如果我将move更改为xcopy,它只复制nfo文件。我有所有必要的管理员权限以及作为管理员运行cmd。我认为这与windows有关。@Failstyle:我已经更新了处理
system32
问题的代码。检查答案中的
PUSHD
POPD
。您现在可以
以管理员身份运行并验证。现在应该可以了。