我想将我的.gitignore
文件复制到我的目录中的所有项目中。
如果文件夹中已有该文件,我不想覆盖该文件(因此标记以请求确认/-y
)
for /d %a in (C:\WebDocs\wamp\www\) do copy /-y C:\WebDocs\wamp\www\FolderContainingFileIWantCopied\.gitignore %a
在我运行它之前,有人可以确认这是准确的吗?并让我知道我应该期待什么(有超过 200 个文件夹,其中大约 10-20 个当前有 .gitignore 文件。
虽然我在 90 年代习惯使用命令行,但我对运行一个可能涉及如此多项目的命令感到紧张
答案1
仅适用于顶级子文件夹:
如果您想坚持使用命令行:
for /d %A in ("C:\WebDocs\wamp\www\*") do (if not exist "%A\file.gitignore" copy /y "C:\WebDocs\wamp\www\FolderContainingFileIWantCopied\file.gitignore" "%A\file.gitignore")
我通常更喜欢在可以使用变量的地方使用变量,因此我也将其批量写出 - 并且还使用它if not exist
来代替复制/-y
提示以使其更加自动化,但仍然不需要不必要地复制(如果您更喜欢命令提示符,您可以删除它if not exist
,/-y
但我觉得它看起来很乱 - 特别是当它每次都可能重复一个很长的命令时)。
@echo off
set "dir=C:\WebDocs\wamp\www\"
set "file=file.gitignore"
set "filepath=%dir%\FolderContainingFileIWantCopied\%file%"
for /d %%A in ("%dir%*") do (
if not exist "%%A\%file%" copy /y "%filepath%" "%%A\%file%"
)
两者都应该可以实现您的目标。您缺少的重要部分位于*
您的for /d
文件夹集中,并且末尾的%A
(命令行) 或%%A
(批处理) 还需要包含您复制的文件的名称,这就是为什么我分别将其写为%A\file.gitignore
和%%A\file.gitignore
(尽管在批处理中它表示为变量)。
对于所有子文件夹:
对于命令行:
for /d /r "C:\WebDocs\wamp\www\" %A in (*) do (if not exist "%A\file.gitignore" copy /y "C:\WebDocs\wamp\www\FolderContainingFileIWantCopied\file.gitignore" "%A\file.gitignore")
对于批次:
@echo off
set "dir=C:\WebDocs\wamp\www\"
set "file=file.gitignore"
set "filepath=%dir%\FolderContainingFileIWantCopied\%file%"
for /d /r "%dir%" %%A in (*) do (
if not exist "%%A\%file%" copy /y "%filepath%" "%%A\%file%"
)