我在批处理文件中使用简单的“移动”命令遇到麻烦。
为了提供一些可能有用的上下文,我正在编写的文件的首要目的是将命名文件夹排序为带有字母标记的文件夹。
例如,一个名为“ Allen,Jake”的文件夹将被归类为一个名为“ A”的文件夹,一个名为“ Brown,Sarah”的文件夹将被归类为一个名为“ B”的文件夹,依此类推。
这是我遇到问题的代码行:
move "%SourceDirectory%\A*" "%DestinationDirectory%\A"
运行命令时,我希望将名为“ Allen,Jake”的文件夹从%SourceDirectory%移至“%DestinationDirectory \ A”。
相反,我看到以下输出:
C:\Users\alecm\Desktop>move "C:\Users\alecm\Desktop\Source\A*"
"C:\Users\alecm\Desktop\Destination\A"
The filename, directory name, or volume label syntax is incorrect.
我想我在这里犯了一个简单的语法错误,但是我似乎无法弄清楚。预先感谢您抽出宝贵的时间对此进行研究。
答案 0 :(得分:0)
move
命令不接受通配符。将SOURCE_BASE
和TARGET_BASE
目录更改为您的目录。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "SOURCE_BASE=C:\src\t"
SET "TARGET_BASE=C:\src\t\new"
FOR %%L IN (A) DO (
FOR /F "delims=" %%F IN ('DIR /B /A:D "%SOURCE_BASE%\%%L*"') DO (
SET "DNAME=%%~F"
SET "FIRST_LETTER=!DNAME:~0,1!"
SET "NEW_DIR=%TARGET_BASE%\!FIRST_LETTER!"
IF NOT EXIST "!NEW_DIR!" (MKDIR "!NEW_DIR!")
MOVE "%%~dpnxF" "!NEW_DIR!"
)
)
如果将其放在.bat脚本中,请确保将F变量的%
个字符加倍。 %%F
如果您想做的不仅仅是A*
目录,请将第一个FOR循环更改为FOR %%d IN (A B C D) DO (
。