Перемещение файлов с использованием For Loop в программировании пакетных файлов - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь создать , чтобы упорядочить файлы по типам файлов.

Идея состоит в том, чтобы переместить все файлы с расширениями , за исключением запущенного сценария , в новые каталоги, каждый из которых назван с расширением.

Какой код мне нужно добавить или заменить некоторым кодом, приведенным ниже? Этот .bat файл находится в папке Documents, и там есть несколько файлов.

@echo off
set x="%cd%\log.txt"
rem 'log.txt' contains the name of folder 'My Folder' and is already created in Downloads folder.
for %%a in (".\*") do (
    for /F "tokens=*" %%i In ('type %x%') do (
        if "%%~xa" neq "" if "%%~dpnxa" neq "%~dpnx0" (
            if not exist "C:\Users\%username%\Downloads\%%i\%%~xa" md "C:\Users\%username%\Downloads\%%i\%%~xa"
            move "%%a" "C:\Users\%username%\Downloads\%%i\%%~xa\"
        )
    )
)
pause

ВЫВОД:

The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
Press any key to continue . . .

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Учитывая мое понимание того, что вы пытаетесь сделать, я бы предложил что-то более похожее на это:

@Echo Off
Set "DestDirName=My Folder"
If Exist "%~dp0log.txt" Set /P "DestDirName="<"%~dp0log.txt"
If Exist "log.txt" Set /P "DestDirName="<"log.txt"
For %%A In (*)Do If /I Not "%%A"=="%~nx0" If Not "%%A"=="log.txt" If Not "%%~xA"=="" (
    Set "FileExtension=%%~xA"
    SetLocal EnableDelayedExpansion
    RoboCopy . "%UserProfile%\Downloads\%DestDirName%\!FileExtension:~1!" "%%A" /Mov>Nul
    EndLocal
)
Pause

Линии 2, 3 и 4 будут Setимя родительского каталога в Downloads, в котором будут храниться каталоги, в которые будут перемещены ваши файлы.Я использовал новый каталог с именем My Folder в качестве резервной копии на тот случай, если файл log.txt не может быть найден ни в текущем каталоге, ни в том, в котором содержится ваш запущенный пакетный файл.В настоящее время он выбирает имя в следующем порядке предпочтения: «текущий каталог», «каталог пакетных файлов», «Моя папка»;Вы можете переключать строки 3 и 4, если вы предпочитаете, чтобы «каталог файловых файлов» имел приоритет над «текущим» каталогом.Если найден log.txt, команда Set /P установит для переменной DestDirName содержимое первой строки этого файла, , пожалуйста, не используйте двойные кавычки или обратную косую черту в этом содержимом .

Затем цикл For переместит все файлы с расширениями в каталоги, названные с использованием их расширения, без начального периода , находящегося в каталоге, из строк 2 - 4, а внутри директории users Downloads.При этом он не будет включать себя или любой файл с именем log.txt.

Кстати, не имеет значения, если строковое значение имени каталога %DestDirName% уже существует в Downloads, онбудет создан автоматически, если он не .

0 голосов
/ 18 апреля 2019

Это создаст папки как C:\users\username\Downloads\.ext, включая точку.

@echo off 
set "x=%~dp0\log.txt"
rem 'log.txt' contains the name of folder 'My Folder' and is already created in Downloads folder.

  for /F "delims=" %%i In ('type %x%') do (
   if "%%~xi" neq ""  if "%%~fi" neq "%~f0" (
       md "%userprofile%\%%~xi" >nul 2>&1
       move "%%~fi" "%userprofile%\Downloads\%%~xi\"
       )
   ) 
pause

Если вам не нужна точка. т.е. C:\users\username\Downloads\ext

@echo off
setlocal enabledelayedexpansion
set "x=%~dp0\log.txt"
rem 'log.txt' contains the name of folder 'My Folder' and is already created in Downloads folder.

  for /F "delims=" %%i In ('type %x%') do (
   if "%%~xi" neq ""  if "%%~fi" neq "%~f0" (
       set "ext=%%~xi"
       call set ext=!ext:.=!
       md "%userprofile%\!ext!" >nul 2>&1
       echo move "%%~fi" "%userprofile%\Downloads\!ext!"
       )
   ) 
pause

Обратите внимание, я удалил %%i из команды md, так как она создаст папку с именем файла, если это то, что вы хотели, просто положите его обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...