使用bat脚本读取不同文件夹中存在的相应文本文件后,重命名多个pdf文件

时间:2018-10-13 23:37:12

标签: batch-file cmd windows-7

问题

我正在研究一个蝙蝠脚本,该脚本应该能够从诸如Z:/ Demo / Text的位置读取1000个文本文件,并且在读取存储的值之后,该脚本能够重命名位于Z位置的相应pdf文件。 :/演示/ 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 :(得分:1)

@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

这段代码实际上是原始代码的副本,只有两个区别:

  • AAABBB的值分别设置为12。这些值在问题描述中说明。
  • 根据问题描述中的要求,所需的if命令更改了两个仅显示文本文件中值的ren命令。如问题所述,在ren命令中,.pdf文件的位置设置为\Demo\PDF。名称的新部分由CGI!%%a!_组成。 %%a包含对应于描述的文本文件AAABBB中存储的值。这样,!%%a!部分变为!AAA!!BBB!,它通过延迟扩展被AAABBB的值替换,因此新文件名是问题中要求的CGI1_SomeDate_Part1.pdfCGI2_SomeDate_Part2.pdf

答案 1 :(得分:0)

如果您愿意继续使用PowerShell,则此代码可以满足您的要求。我还没有测试。如果您确信文件将被正确重命名,请从-WhatIf cmdlet中删除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 shell运行它:

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"
    )