我有一个名为 .nomedia 的文件。我试图将其复制到一个名为 Media 的文件夹中,而 Media 里面有 1000 个文件夹,这些文件夹又包括文件夹中的文件夹。我需要将 .nomedia 文件粘贴到所有这些子文件夹中的最后一个文件夹中。可以吗?
答案1
@echo off && setlocal enabledelayedexpansion
cd /d "f:\Super_User" && set "_source=F:\Batch\source\.nomedia"
for /d /r %%i in (*)do tree /a "%%~fi" | find "\-" >nul||copy "!_source!" "%%~fi\"
endlocal && goto :eof
- 按常规格式:
@echo off && setlocal enabledelayedexpansion
cd /d "f:\Super_User" // replace to full path to your root directory
set "_source=F:\Batch\source\.nomedia" // replace to full path to you file your file .nomedia
for /d /r %%i in (*)do tree /a "%%~fi"|find "\-" >nul||copy "!_source!" "%%~fi\"
endlocal
- 在命令提示符中(在根文件夹中)用一行执行相同的操作:
for /d /r %i in (*)do tree /a "%~fi"|find "\-">nul||copy "D:\Folder\source\to\your\file\.nomedia" "%~fi\"
- 或者,...
for /d /r "F:\Super_User" %i in (*)do tree /a "%~fi"|find "\-" >nul||copy "F:\Batch\source\.nomedia" "%~fi\"
要获取子文件夹的最后一级,只需要检查每个子文件夹中是否有另一个文件夹,如果没有,则复制文件...
您可以使用for /d /r
循环,它将遍历所有文件夹,并在循环内的每个文件夹中,将命令tree
与命令一起使用find
,您可以在其中检查当前文件夹是否有更多子文件夹,如果没有,则将文件复制到该级别的最后一个文件夹。
FOR /R - Loop through files (recursively) FOR /D - Loop through several folders/directories
The option /D /R is undocumented, but can be a useful combination, while it will recurse through all subfolders the wildcard will only match against Folder/Directory names (not filenames) Note: Source linked to ss64.com
您可以在循环的所有子文件夹中使用(递归)tree "current_loop_folder" /a
for /d /r
,并通过检查每个输出查找“字符串”(find "\-"
)重定向至运营商||
并采取行动(copy
)如果\-
在命令tree
输出中没有找到此字符串\\---test
:
Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1550103
\---test
上面的输出来自我所在的文件夹,F:\SUPERUSER\Q1550103
这里有test
子文件夹,但如果我在F:\SUPER_USER\Q1550103\test
子文件夹中,我会得到以下输出:
Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1550103\TEST
No subfolders exist
如果find
找不到字符串"\-"
,则当前文件夹中没有子文件夹,这是当前树中的最后一个文件夹:
F:\SUPER_USER\Q1550103\test
这种情况下,如果没有子文件夹的话,commandtree "Actual_Loop_Folder" /a | find "\-"
命令就不会成功,那么就让操作员在你实际文件夹级别的最后一个文件夹中精确地||
执行命令......copy
这将尝试说明||
操作员如何机械地工作:
command1 || command2
execute commad1 || only execute command2 (if) commad1 fails
if tree folder /a fails || there is no subfolder in it
there is no subfolder in it || this is the last subfolder
this is the last subfolder || run copy file .nomedia
tree /a "%~fi"|find "\-">nul || copy"D:\Folder\source\to\your\file\.nomedia"
有关操作员行为的更多信息,请参阅下面的链接参考条件执行
注意:您需要编辑相关路径
cd /d
和set _source=
命令:
cd /d "f:\Super_User" && set "_source=F:\Batch\source\.nomedia" &&.....
:: replace to ::
cd /d "f:\Super_User" // replace to full path to your root directory target
set "_source=F:\Batch\source\.nomedia" // replace to full path to you file your file .nomedia
答案2
我编写了这段代码,它似乎在我的测试中有效,就像你在这里看到的那样视频。
@echo off
setlocal EnableDelayedExpansion
set "Filetocopy=C:\Users\Ricardo\Desktop\Copiar para ultima pasta\nomedia"
set "Folders=C:\Users\Ricardo\Desktop\Copiar para ultima pasta"
for /f "delims=" %%a in ('dir /b /s /ad "%Folders%" ^|sort /r') do (
Set /a Runs+=1
set "NameA=%%a"
if /i [!Runs!]==[1] Set "NameB="
if /i ["!NameB:%%a\=!"]==["!NameB!"] copy "!Filetocopy!" "!NameA!"
set "NameB=!NameA!\"
)
答案3
此批处理将 .nomedia 文件复制到 MYNOMEDIAFOLDERPATH 的所有 1000 多个子目录中
要在控制台中显示输出,请在复制命令行中删除 >nul,以免覆盖现有的 .nomedia 文件,请将 echo y|copy /-y 替换为 echo n|copy /-y
set "source=FULLPATHOF.nomedia"
for /f "delims=" %%D in ('dir /b /s /ad "C:\MYNOMEDIAFOLDERPATH\*") do (
echo y|copy /-y "%source%" "%%~D">nul
)
要更改的参数
MYNOMEDIAFOLDERPATH ... full path to your .nomedia file e.g.: C:\mylocaldir1\mylocaldir2\.nomedia
C:\MYNOMEDIAFOLDERPATH\* ... full path to your target directory e.g.: H:\myserverdir1\myserverdir2\*
如果你的路径中有空格,请使用“”将路径括起来
编辑
因此,对于你来说,这应该可行:
set "source=D:\Batch\source\.nomedia"
for /f "delims=" %%D in ('dir /b /s /ad "D:\Batch\Media\*") do (
echo y|copy /-y "%source%" "%%~D">nul
)