![如何从父文件夹移动文件而不是其子文件夹?](https://linux22.com/image/1506974/%E5%A6%82%E4%BD%95%E4%BB%8E%E7%88%B6%E6%96%87%E4%BB%B6%E5%A4%B9%E7%A7%BB%E5%8A%A8%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E6%98%AF%E5%85%B6%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
因此,我有以下代码:
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 应该使用绝对路径,因为当您尝试“向上”时相对路径会变得难看。