我正在尝试编写批处理文件以将文件从一个文件夹移动到另一个文件夹。文件夹的名称中有一个特殊字符。我无法更改该名称。
这是我的脚本
set "MM=%Date:~4,2%"
set "DD=%Date:~7,2%"
set "thisDate=%MM%%DD%"
set baseDir="T:R ^& D files received"
set backupDir=%baseDir%2022%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%2022%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"
设置字符串值 - 这样可以避免由尾随空格引起的问题。不要分配终端,空格或引号 - 从元素构建路径名 - 违反直觉,这可能会使过程更容易。
你的for %%f
决心for %%f in (""T:R ^& D files received"*.pdf") do (
因此奇怪的结果。
请注意,%%f
包含.pdf
文件的完整路径名 - 其中包括空格。因此,您需要"引用源文件名",并仅使用该文件的名称和扩展名(%%~nxf
)连接到带有分隔符的backupdirectoryname字符串上 - 所有这些文件都包含一个空格,因此需要用引号括起来。
追加>nul
以禁止显示1 file(s) moved
消息。