当文件夹名称包含点时,BATCH“系统找不到文件”

Posted

技术标签:

【中文标题】当文件夹名称包含点时,BATCH“系统找不到文件”【英文标题】:BATCH "system cannot find file" when folder name contains dots 【发布时间】:2021-03-30 03:05:01 【问题描述】:

在我脚本的这一部分中,我使用 robocopy 将文件夹的内容复制到另一个文件夹中,但如果源文件夹的名称中有 1 个或多个点,则会失败:“系统找不到指定的文件。”

我也尝试过 move 和 xcopy 但同样的事情。有什么办法吗?

这是完整的脚本:

set currentfolder=UserData\
set Index=1
for /d %%D in (%currentfolder%*) do (
set "folderlist[!Index!]=%%~nD"
set /a Index+=1
)

set /a UBound=Index-1

for /l %%i in (1,1,%UBound%) do (
for %%f in ("!folderlist!") do (
echo;  %%i. !folderlist[%%i]!
))

    set /p FolderChoice= Now please select a folder : 

    robocopy "UserData\!folderlist[%FolderChoice%]!" "UserData\newfoldername" /IS /IT

【问题讨论】:

注意:对于 FOR,扩展名是从最后一个点到名称末尾的所有内容,独立于分配给循环变量的字符串是文件夹名还是文件名。文件夹名称也可以包含一个或多个点,尽管这很不寻常。因此,使用文件夹名称 %%~nxD 而不仅仅是 %%~nD 来引用不带路径的完整文件夹名称。 【参考方案1】:
set "folderlist[!Index!]=%%~nD"

应该是

set "folderlist[!Index!]=%%~nxD"

同时选择Name 和eXtension

【讨论】:

以上是关于当文件夹名称包含点时,BATCH“系统找不到文件”的主要内容,如果未能解决你的问题,请参考以下文章