如何从父文件夹移动文件而不是其子文件夹?

如何从父文件夹移动文件而不是其子文件夹?

因此,我有以下代码:

for /r ../ %%a IN (*.pdf) do move "%%a" ".\"

我正在尝试移动父文件夹中的所有 PDF 文件,而不是父文件夹中的子文件夹。例如,

我当前的目录是 Child1,我有这个

父母/孩子1

父/子2/某些 PDF 文件.PDF

父/子3/另一个-PDF-文件.PDF

家长/PDF1.PDF

家长/PDF2.PDF

家长/PDF3.PDF

我尝试仅将文件 PDF1.PDF、PDF2.PDF 和 PDF3.PDF 移动到 Child1。但我的代码移动了所有 PDF 文件。

我需要做什么?

谢谢。

PS 这是我的批处理文件的一部分

ECHO

for %%a in (..\*.pdf) do (
    move "%%a" .
    )

pause

for %%i in (*.pdf) do (
    pdftotext -enc UTF-8 "%%i" ".\output\%%~ni.txt"
    )

cd .\Output

findstr /S /I ## *.txt > ../log.txt

pause

cd ..

for %%F in ("log.txt") do (
    if %%~zF equ 0 (
        del "%%F"
        cd .\Output
        for /F "delims=" %%j in ('dir /b') do (
            del "%%j" /s/q
        )
    )
)

pause

for %%a in (*.pdf) do (
    move "%%a" ..
    )

答案1

但是,我的代码移动了所有的 PDF 文件。

对于/r ../ %%a IN (*.pdf) 执行移动 "%%a" ".\"

我需要做什么?

for上面的命令中您已经指定/r,这意味着该for命令是递归的 - 循环遍历文件(递归子文件夹)。

这个问题有很多不同的解决方案,但其中之一是以下批处理文件:

测试.cmd:

@echo off 
setlocal enabledelayedexpansion
for %%a in (..\*.pdf) do (
  move "%%a" .
  )
endlocal

用法:

F:\test\Child1>dir ..\*.pdf
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

27/08/2016  11:06                 0 1complete1.pdf
27/08/2016  11:06                 0 2complete2.pdf
27/08/2016  11:06                 0 complete1.pdf
27/08/2016  11:06                 0 complete2(s).pdf
               4 File(s)              0 bytes
               0 Dir(s)  1,764,571,938,816 bytes free

F:\test\Child1>test
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.

F:\test\Child1>dir
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test\Child1

16/09/2016  12:53    <DIR>          .
16/09/2016  12:53    <DIR>          ..
27/08/2016  11:06                 0 1complete1.pdf
27/08/2016  11:06                 0 2complete2.pdf
27/08/2016  11:06                 0 complete1.pdf
27/08/2016  11:06                 0 complete2(s).pdf
16/09/2016  12:53               102 test.cmd
               5 File(s)            102 bytes
               2 Dir(s)  1,764,571,938,816 bytes free

答案2

cd /path/to/parent
mv *.pdf Child1

要不就

mv /path/to/parent/*.pdf /path/to/parent/Child1

使用时mv,如果您不指定递归,它就不会递归。

由于我注意到原始“代码”是批量的,

cd <drive>:\path\to\parent
move *.pdf Child1

或者

move <drive>:\path\to\parent\*.pdf <drive>:\path\to\parent\Child1

或者在 PowerShell 中运行第一个发布的代码,使用 Windows 语法中的路径。

无论哪种方式,无论哪种操作系统和 shell,OP 都会运行递归命令并获得递归结果。如果 OP 想要一个文件夹的内容,OP 需要移动到那里并“本地”执行,使用相对路径执行,或使用绝对路径执行。如果命令的执行位于文件系统比源和目标更深的位置,那么 OP 应该使用绝对路径,因为当您尝试“向上​​”时相对路径会变得难看。

相关内容