有人可以在我运行此 Windows 命令之前检查一下吗

有人可以在我运行此 Windows 命令之前检查一下吗

我想将我的.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%"
)

参考:复制为了

相关内容