遍历文件夹名称中包含特殊字符的文件夹

loop through a folder with special characters in the folder name

我正在尝试编写批处理文件以将文件从一个文件夹移动到另一个文件夹。该文件夹的名称中有一个特殊字符。我无法更改该名称。

这是我的脚本

set "MM=%Date:~4,2%" 
set "DD=%Date:~7,2%"
set "thisDate=%MM%%DD%"

set baseDir="T:\R ^& D files received"
set backupDir=%baseDir%22\%thisDate%

if not exist "%backupDir%\NUL" mkdir "%backupDir%"

for %%f in ("%baseDir%\*.pdf") do ( 
echo %%f  
move %%f "%backupDir%\%%f")

这是行不通的。我得到

R
&
D
files
received\*.pdf

没有文件被移动。 任何想法或帮助表示赞赏。

@ECHO OFF
SETLOCAL

SET "thisdate=0419"

set "baseDir=U:\R & D files received"
set "backupDir=%baseDir%22\%thisDate%"

if not exist "%backupDir%\NUL" mkdir "%backupDir%"

for %%f in ("%baseDir%\*.pdf") do ( 
 echo "%%f"
 move "%%f" "%backupDir%\%%~nxf" >nul
)

DIR /s "%basedir%"

GOTO :EOF

有趣的是。您已经使用 set "var=value" 格式设置 thisdate 但不是目录名称。我使用 thisdate 的常量,因为我使用 YYYYMMDD 日期格式。

另外,我的试驾是U:,不是T:

提示:使用 set "var=value" 设置字符串值 - 这避免了尾随 space 引起的问题。不要分配终端 \、space 或引号 - 从元素构建路径名 - 违反直觉,这可能会使过程更容易。

你的 for %%f 解析为 for %%f in (""T:\R ^& D files received"\*.pdf") do ( 因此奇怪的结果。

请注意 %%f 包含 .pdf 文件的完整路径名 - 其中包括 spaces。因此,您需要“引用源文件名”并仅使用该文件的名称和扩展名 (%%~nxf) 连接到带有分隔符的 backupdirectoryname 字符串 - 所有这些都再次包含 space 因此需要被引用。

附加

>nul 以抑制 1 file(s) moved 条消息。