Массовое переименование и перемещение файлов

Я ищу метод на основе Windows / Dos для переименования и копирования/перемещения файлов на основе содержимого файла импорта CSV.

например:

Import file example:

"C:Dir1File001.txt","Q:Dir02Dir03Dir04NewFile001.txt"
"C:Dir2File002.txt","Q:Dir05Dir06Dir07NewFile002.txt"
"C:Dir3File003.txt","Q:Dir08Dir09Dir10NewFile003.txt"

что мне нужно

идеально метод принял бы вышеуказанное как входной сигнал и скопируйте/двиньте архивы от колонки 1 к колонке 2 пока создающ все необходимые директории.

Я тоже ищу некоторые обработки ошибок, таких как

  • не могу создать папку (для любой reason)
  • файл уже существует - либо в месте назначения, либо потому, что вход переименования помещает два файла с тем же именем в тот же каталог.
  • есть способ иметь дело с наездом (добавить суффикс и т. д.).

что я пробовал

Я пробовал следующие приложения до сих пор, но так и не смогли заставить их работать как мне нужно, так хотел увидеть, если есть другой способ, а не программное обеспечение, которое будет делать такую операцию с Windows:

  1. Утилита Массового Переименования

    • попытался использовать функцию" импорт пар", но не получил результатов. (Буквально ничего не происходит без ошибок.)
  2. Дополнительно Переименованы

    • можно импортировать файл загрузки, но он использует только имена файлов из столбца 2. Не перемещает файлы в папки.
  3. пакет Dos используя переместить или скопировать

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

    • мой экземпляр серии

      • COPY /Y "C:Dir1File001.txt" "Q:Dir02Dir03Dir04NewFile001.txt"

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

23
задан Pimp Juice IT
05.12.2022 17:23 Количество просмотров материала 2514
Распечатать страницу

1 ответ

используя некоторые простые FOR / F логика и, установив разделители и маркеры соответственно, вы можете проанализировать через каждую строку файла csv и использовать каждое значение, разделенное запятыми в качестве переменной для обработки соответственно на каждой итерации цикла.

С некоторым простым условным если логика, вы можете контролировать, какие команды для запуска на основе каждого условия быть TRUE или FALSE но это может проверить, является ли или не файлы уже существуют или нет, и принять соответствующие меры.

С помощью XCOPY команда с конвейером ECHO F говорит ему, что каждый переданный ему параметр является файлом, а не каталогом, и если какой-либо каталог не существует нигде по пути, куда файл копируется (например, столбец 2), всего будет создано во время операции копирования файлов.

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

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


по сути это будет. . .

  1. используйте запятую в качестве разделителя FOR / F цикл и получить каждое значение из файла csv, разделенных каждым разделителем, чтобы использовать по отдельности для дальнейшей обработки
  2. если исходный файл из столбца 1 не существует, выйти и обработать следующую строку csv
  3. если файл назначения из столбца 2 существует, вызывать процедуру и пройти два CSV-файл значений линии, что обычные переменные для расширения и процесс дальше

    • эта процедура создаст уникальную строку, используя date time <YYYYMMDD_hhmmsstt> и убедитесь, что это добавляется к месту назначения имя файла, которое копируется поверх существующего файла перезаписывается операцией копирования
  4. если как файл назначения не существует и the исходный файл не существует, оно просто скопирует над архивом от источника к пункт назначения

  5. If ни одно из этих условий, тогда он ничего не делает с повторяющимися значениями csv-файла из этих строк.


Скрипт

@ECHO ON

SET csvfile=C:\Users\User\Desktop\test.csv

FOR /F "USEBACKQ TOKENS=1,2 DELIMS=," %%a in ("%csvfile%") DO ( 
    IF NOT EXIST "%%~a" GOTO :EOF
    IF EXIST "%%~b" CALL :DupeRoutine "%%~a" "%%~b"
    IF NOT EXIST "%%~b" IF EXIST "%%~a" ECHO F | XCOPY /Y /F "%%~a" "%%~b"
)
GOTO :EOF

:DupeRoutine
::: --Use this with system DATE format "Fri 10/13/2017"
::SET tstamp=%date:~10%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
::: Use this with system DATE format "2017-10-13"
SET tstamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
SET tstamp=%tstamp: =0%

ECHO F | XCOPY /Y /F "%~dpnx1" "%~dp2%tstamp%%~n2%~x2" 
GOTO :EOF

Примечание: если вы хотите удалить исходные файлы после того, как файл скопирован в место назначения, вы можете внести некоторые незначительные коррективы с помощью этого примера пакетного сценария, используя дальнейшую условную логику, такую как && DEL /Q /F <sourcefile> добавляется к соответствующим командам, где операции копирования завершены.


Дополнительные Ресурсы

  • FOR / F
  • если
  • вызов

    HELP CALL
    
    Substitution of batch parameters (%n) has been enhanced.  You can
    now use the following optional syntax:
    
        %~1         - expands %1 removing any surrounding quotes (")
        %~d1        - expands %1 to a drive letter only
        %~p1        - expands %1 to a path only
        %~n1        - expands %1 to a file name only
        %~x1        - expands %1 to a file extension only
    
  • XCOPY

1
отвечен Pimp Juice IT 2022-12-07 01:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

batch
command-line
rename
windows
Вверх