gpt4 book ai didi

windows - 如果名称中有 - 则 for/d 迭代文件夹不起作用

转载 作者:可可西里 更新时间:2023-11-01 11:50:18 25 4
gpt4 key购买 nike

我在 Setup 文件夹中有很多这样的文件夹:

PN 1001-1.22 abe
PN 1001-1.12 dfe
PN 1001-1.33 fgh -
PN 1001-1.01 ijk
PN 1001-1.37 lmn
PN 1001-1.02 opq

这些文件夹中的每一个都有一个名为 install 的子文件夹,其中包含一个可执行文件。

我想将可执行文件复制到 .\Setup 文件夹。所以我使用这样的脚本:

for /d %%G in (Setup\*) do (
xcopy "%%G\Installation\*.exe" .\Setup
)

但除了 PN 1001-1.33 fgh - 文件夹外,该脚本工作正常。必须是 - on 端。我得到错误:

File not found - *.exe

我该如何解决这个问题?如果那是唯一的方法,我什至可以去掉 - on end?

我在 Windows 7 上运行。

最佳答案

- 结尾的文件或文件夹名称应该不是问题。我怀疑您在错误的文件夹名称中有尾随空格。

Windows 通常不允许以空格或句点结尾的文件或文件夹名称,但有一些模糊的方法来创建它们。一旦创建,它们就会造成严重破坏,因为许多命令无法使用这些通常非法的名称。

为了证明这个理论,在你的 Setup 文件夹中执行以下命令:

for /d %F in ("PN 1001-1.33 fgh -*") do @echo "%F"

我相信您会看到如下结果:"PN 1001-1.33 fgh - "。注意尾随空格。

某些命令可以通过在完整路径前加上 \\?\ 来处理这些问题名称。不幸的是,RENAME 不是其中之一,并且 MOVE 也不允许您重命名文件夹。

我建议您将所有文件和文件夹从问题文件夹中移出到一个正确命名的文件夹中,然后删除有问题的文件夹。但是 XCOPY 和 ROBOCOPY 不能与 \\?\ 一起使用,所以移动子文件夹有点棘手。

以下脚本应该有所帮助,但您必须修复“root”、“old”和“new”变量以匹配您的特定根路径和问题文件夹名称:

setlocal

set "root=c:\full\path\to\your\Setup"
set "old=%root%\PN 1001-1.33 fgh - "
set "new=%root%\PN 1001-1.33 fgh"

md "%new%"
move "\\?\%old%\*" "%new%"
for /d %%F in ("\\?\%old%\*") do move "%%F" "%new%"
rd "\\?\%old%"

运行后,问题文件夹应该已有效重命名,删除“-”后缀。

可以在 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx 找到定义文件和文件夹名称规则的 Microsoft 文章

关于windows - 如果名称中有 - 则 for/d 迭代文件夹不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com