对于/d迭代文件夹不工作,如果有一个- in名称



在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 "%%GInstallation*.exe" .Setup
)

但是脚本工作正常,除了pn1001 -1.33 fgh -文件夹。一定是- on端。我得到错误:

File not found - *.exe

我该如何解决这个问题?如果这是唯一的办法,我甚至可以去掉- on的末端?

-结尾的文件或文件夹名称应该没有问题。我怀疑你在错误的文件夹名后面有一个空格。

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

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

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

我相信你会看到这样的结果:"PN 1001-1.33 fgh - "。注意后面的空格

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

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

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

setlocal
set "root=c:fullpathtoyourSetup"
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%"

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

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

找到。

试试这个:

for /f "tokens=*" %%g in ('dir /b /ad Setup*') do (
    for /f "tokens=*" %%h in ('dir /b "Setup%%gInstallation*.exe"') do (
        copy /y /b "Setup%%gInstallation%%h" Setup
    )
)

注释(edit1): 第一个变体没有考虑文件夹名称中的空格

相关内容

最新更新