我正在尝试使用部分文件名(前10位唯一数字)创建文件夹,然后将文件移动到相应的文件夹。我能够创建文件夹但由于某种原因,无法将文件移动到文件夹中。知道为什么吗?这是我的代码:
@echo off
for /f %%a in ('dir /a-d /b') do (
if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)
goto :EOF
:func
set file=%~1
set dir=%file:~0,10%
md "%dir%" 2>nul
move "%file%" "%dir%"
goto :EOF
答案 0 :(得分:0)
它可以工作,但是如果你的文件名中有空格,它仍会创建大部分或整个文件夹,具体取决于空格的位置,但不能移动文件..
因此,为了纠正此问题,请尝试将"delims="
添加到for循环以跳过默认分隔符,默认为空格。
@echo off
for /f "delims=" %%a in ('dir /a-d /b') do (
if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)
goto :EOF
:func
set file=%~1
set "dir=%file:~0,10%"
md %dir% 2>nul
move "%file%" "%dir%"
答案 1 :(得分:0)
虽然看起来很奇怪,但您可以使用RoboCopy
来移动'文件也是。以下示例使用Where
命令仅选择包含至少10个字符的文件(这意味着您可以将脚本名称保留为少于10个字符,并且您不需要过滤它):
@Echo Off
SetLocal EnableDelayedExpansion
For /F "Delims=" %%A In ('Where .:??????????*.*') Do (Set "FN=%%~nA"
RoboCopy . "!FN:~,10!" "%%~nxA" /Mov>Nul)
请记住,这并不能防止以空格结尾的目录被创建,即文件名的第10个字符是 space ,这可能会在以后引起您的问题!