Переименуйте несколько файлов PDF после прочтения соответствующих текстовых файлов, присутствующих в другой папке, используя скрипт bat - PullRequest
0 голосов
/ 14 октября 2018

ПРОБЛЕМА

Я работаю над сценарием bat, который должен иметь возможность читать 1000 текстовых файлов из местоположения, скажем Z: / Demo / Text, и после чтения сохраненных значенийСкрипт может переименовать соответствующие PDF-файлы, присутствующие, скажем, в Z: / Demo / PDF.Текстовые файлы именуются и читаются следующим образом: SomeDate_Part1.txt, SomeDate_Part2.txt ....

И файлы PDF имеют одинаковые атрибуты, только расширение файла отличается.

Логика переименования:

Если значение, хранящееся в файле SomeDate_Part1.txt, является AAA, то соответствующий файл PDF, то есть SomeDate_Part1.pdf, следует переименовать в CGI1_filename.pdf, а если сохраненное значение - BBBтогда он должен быть переименован в CGI2_filename.pdf.

Я написал несколько строк и смог успешно прочитать все текстовые файлы из папки.Код, который я написал:

@echo off
for %%x in (\Demo\Text\*.txt) do (
    for /f "usebackq delims=" %%a in ("%%~fx") do (
        if "%%a"=="AAA" echo %%a
        if "%%a"=="BBB" echo %%a
    )
)
pause

Как я могу решить оставшуюся проблему?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Если вы хотите продвинуться вперед в PowerShell, этот код может сделать то, что вы хотите.Я не проверял это.Если вы уверены, что файлы будут переименованы правильно, удалите -WhatIf из командлета Rename-Item.

Сохраните этот скрипт как Rename-PdfFiles.ps1.

Get-ChildItem -File -Path '\Demo\Text' -Filter '*.txt' |
    ForEach-Object {
        $fn = $_.BaseName
        $pdfname = "\Demo\Text\$($fn).pdf"

        if (Test-Path -Path $pdfname) {
            $mark = Get-Content -Path $_
            if ($mark -eq 'AAA') { $prefix = 'CGI1' } else { $prefix = 'CGI2' }
            Rename-Item -Path $pdfname -NewName "$($prefix)_$(fn).pdf" -WhatIf
        }
    }

Запустите его изоболочка cmd, использующая:

powershell -NoProfile -File .\Rename-PdfFiles.ps1

Если вы не можете закончить создание файла .bat, это может сработать.Я не проверял это либо.Если он выводит правильные команды RENAME, удалите echo в начале строки.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%x IN ('\Demo\Text\*.txt') DO (
    SET "FN=%%~nx"
    SET "PDFNAME=\Demo\Text\!FN!.pdf"

    IF EXIST "!PDFNAME! (
        SET /P "MARK=" <"%%~x"
        IF "!MARK!" == "AAA" ( SET "PREFIX=CGI1" ) else ( SET "PREFIX=CGI2" )
        echo RENAME "!PDFNAME!" "!PREFIX!_!FN!.pdf"
    )
0 голосов
/ 14 октября 2018
@echo off
setlocal EnableDelayedExpansion

set "AAA=1"
set "BBB=2"

for %%x in (\Demo\Text\*.txt) do (
    for /f "usebackq delims=" %%a in ("%%~Fx") do (
        ren "\Demo\PDF\%%~Nx.pdf" "CGI!%%a!_%%~Nx.pdf"
    )
)
pause

Этот код является практически копией оригинала с двумя отличиями:

  • Значения AAA и BBB установлены на 1 и 2,соответственно.Эти значения указаны в расшифровке вопроса.
  • Две команды if, которые просто отображают значения в текстовых файлах, изменяются желаемой командой ren, как требуется в описании вопроса.В команде ren расположение файла .pdf установлено на \Demo\PDF, как указано в вопросе.Новая часть имени состоит из CGI!%%a!_.%%a содержит значение, хранящееся в текстовом файле, которое является AAA или BBB в соответствии с описанием.Таким образом, часть !%%a! становится !AAA! или !BBB!, которая заменяется значением AAA или BBB через отложенное расширение, поэтому новое имя файла будет CGI1_SomeDate_Part1.pdf или CGI2_SomeDate_Part2.pdf в соответствии с запросомв вопросе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...