Я написал этот очень простой пакетный файл, чтобы организовать файлы в каталоге, перемещая их в папки по дате. Итак, файл, дата последнего изменения которого - 31-03-2018, помещается в папку «2018-03-31 -».

Сценарий выглядит следующим образом:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%a IN (*) DO (
    IF NOT "%%a"=="%~nx0" (
        FOR %%b IN (%%a) DO (SET FileDate=%%~tb)
        SET day=!FileDate:~0,2!
        SET month=!FileDate:~3,2!
        SET year=!FileDate:~6,4!
        SET filename=!year!-!month!-!day! - 
        IF NOT EXIST "!filename!" (MD "!filename!")
        MOVE /-Y "%%a" "!filename!"
    )
)
ENDLOCAL
PAUSE

Учитывая этот каталог

Бывает. Видите эту странную папку сверху? Почему это происходит? Это не должно происходить, так как у меня есть EnableDelayedExpansion.

Это то, что внутри этой папки. Просто нормальные файлы, как и все остальные.

Может кто-то пролить свет на то, почему это происходит, и, может быть, любезно предоставить исправление?

РЕДАКТИРОВАТЬ 1:

Это консольный вывод для каталога с 3 файлами:

D:\Leonor\Fotos\Família\2005>´╗┐@ECHO off
'´╗┐@ECHO' is not recognized as an internal or external command,
operable program or batch file.

D:\Leonor\Fotos\Família\2005>SETLOCAL ENABLEDELAYEDEXPANSION

D:\Leonor\Fotos\Família\2005>FOR %a IN (*) DO (
Rem @ECHO %a>test.txt
 Rem @ECHO Organizador de Fotos_old.bat>>test.txt
 IF NOT "%a" == "Organizador de Fotos_old.bat" (
Rem Se o ficheiro não for este batch...
 FOR %b IN (%a) DO (SET FileDate=%~tb )
 ECHO !FileDate!
 SET day=!FileDate:~0,2!
 ECHO !day!
 SET month=!FileDate:~3,2!
 ECHO !month!
 SET year=!FileDate:~6,4!
 ECHO !year!
 SET filename=!year!-!month!-!day! -
 ECHO !filename!
 IF NOT EXIST "!filename!" (MD "!filename!" )
 Rem MOVE /-Y "%a" "!filename!"
)
)

D:\Leonor\Fotos\Família\2005>(
Rem @ECHO Imagem - Carnaval+Pai Nosso - 2005 001.jpg>test.txt
 Rem @ECHO Organizador de Fotos_old.bat>>test.txt
 IF NOT "Imagem - Carnaval+Pai Nosso - 2005 001.jpg" == "Organizador de Fotos_old.bat" (
Rem Se o ficheiro não for este batch...
 FOR %b IN (Imagem - Carnaval+Pai Nosso - 2005 001.jpg) DO (SET FileDate=%~tb )
 ECHO !FileDate!
 SET day=!FileDate:~0,2!
 ECHO !day!
 SET month=!FileDate:~3,2!
 ECHO !month!
 SET year=!FileDate:~6,4!
 ECHO !year!
 SET filename=!year!-!month!-!day! -
 ECHO !filename!
 IF NOT EXIST "!filename!" (MD "!filename!" )
 Rem MOVE /-Y "Imagem - Carnaval+Pai Nosso - 2005 001.jpg" "!filename!"
)
)

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )
ECHO is on.
~0,2
~3,2
~6,4
~6,4-~3,2-~0,2 -

D:\Leonor\Fotos\Família\2005>(
Rem @ECHO Organizador de Fotos.bat>test.txt
 Rem @ECHO Organizador de Fotos_old.bat>>test.txt
 IF NOT "Organizador de Fotos.bat" == "Organizador de Fotos_old.bat" (
Rem Se o ficheiro não for este batch...
 FOR %b IN (Organizador de Fotos.bat) DO (SET FileDate=%~tb )
 ECHO !FileDate!
 SET day=!FileDate:~0,2!
 ECHO !day!
 SET month=!FileDate:~3,2!
 ECHO !month!
 SET year=!FileDate:~6,4!
 ECHO !year!
 SET filename=!year!-!month!-!day! -
 ECHO !filename!
 IF NOT EXIST "!filename!" (MD "!filename!" )
 Rem MOVE /-Y "Organizador de Fotos.bat" "!filename!"
)
)

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )

D:\Leonor\Fotos\Família\2005>(SET FileDate= )
ECHO is on.
~0,2
~3,2
~6,4
~6,4-~3,2-~0,2 -

D:\Leonor\Fotos\Família\2005>(
Rem @ECHO Organizador de Fotos_old.bat>test.txt
 Rem @ECHO Organizador de Fotos_old.bat>>test.txt
 IF NOT "Organizador de Fotos_old.bat" == "Organizador de Fotos_old.bat" (
Rem Se o ficheiro não for este batch...
 FOR %b IN (Organizador de Fotos_old.bat) DO (SET FileDate=%~tb )
 ECHO !FileDate!
 SET day=!FileDate:~0,2!
 ECHO !day!
 SET month=!FileDate:~3,2!
 ECHO !month!
 SET year=!FileDate:~6,4!
 ECHO !year!
 SET filename=!year!-!month!-!day! -
 ECHO !filename!
 IF NOT EXIST "!filename!" (MD "!filename!" )
 Rem MOVE /-Y "Organizador de Fotos_old.bat" "!filename!"
)
)

D:\Leonor\Fotos\Família\2005>ENDLOCAL

D:\Leonor\Fotos\Família\2005>PAUSE
Press any key to continue . . .

1 ответ1

0

Я исправил это, изменив код на

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%a IN (*) DO (
    IF NOT "%%a"=="%~nx0" (
        SET FileDate=%%~ta
        SET day=!FileDate:~0,2!
        SET month=!FileDate:~3,2!
        SET year=!FileDate:~6,4!
        SET filename=!year!-!month!-!day! - 
        IF NOT EXIST "!filename!" (MD "!filename!")
        MOVE /-Y "%%a" "!filename!"
    )
)
ENDLOCAL
PAUSE

(убрал вложенный цикл)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .