2016-11-09 215 views
0

我做了一个批处理脚本来重命名大量的文件。它取出它们的名字并在文本文档中搜索它,复制该行并从中获取我需要的数据,然后重命名该文件。Windows批量重命名文本文件

它似乎大部分工作正常,但我不能检查它是如何做的,因为它不断地在控制台中产生错误/警告。

@echo off 
set ogg=.ogg 
Setlocal EnableDelayedExpansion 
for %%a in (*.ogg) do (
    set fileNameFull=%%a 
    set fileName=!fileNameFull:~0,-4! 
    for /F "delims=" %%a in ('findstr /I !fileName! strings.txt') do (
     endlocal 
     set "stringLine=%%a%ogg%" 
    ) 
    Setlocal EnableDelayedExpansion 
    set fullString=!stringLine:~26! 
    ren %%a "!fullString!" 
) 

pause 

代码的工作,我只是想能够跟踪进展情况,文件10,000s都在同一时间被重命名和我不远处沿着过程是如何指示。

的错误是:

"FINDSTR: Cannot open [...]" 
"The syntax of the command is incorrect." 

回答

0
@echo off 
Setlocal EnableDelayedExpansion 
for %%a in (*.ogg) do (
    for /F "delims=" %%q in ('findstr /I /L /c:"%%~na" strings.txt') do (
    set "stringLine=%%q" 
    ) 
    ECHO ren "%%a" "!stringLine:~26!.ogg" 
) 

pause 

此代码应该是等价的,但固定的,以你的代码已经发布。

修正:

Removed the endlocal/setlocal complication - not required 
changed the inner `for` metavariable - must not be duplicate `%%a` 
Changed the `findstr` switches - add `/L` for literal and `/c:` to force single token in case of a separator-in-name; use `%%~na` to specify "the name part of `%%a`" to avoid the substringing gymnastics. 
removed said gymnastics 
Removed 2-stage string manipulation of destination filename 
Removed superfluous setting of `ogg` 

得到的代码应该重复你所拥有的最初,但它只会报告rename指令。你应该对一个小的代表性样本进行测试来验证。

计数/进度:

set /a count=0 
for %%a in (*.ogg) do (
    for /F "delims=" %%q in ('findstr /I /L /c:"%%~na" strings.txt') do (
    set "stringLine=%%q" 
    ) 
    ECHO ren "%%a" "!stringLine:~26!.ogg" 
    set /a count +=1 
    set /a stringline= count %% 1000 
    if %stringline% equ 0 echo !count! Processed 
) 

pause 

应该表现出你的进步每1000

你可以使用

if %stringline% equ 0 echo !count! Processed&pause 

进展之前等待用户动作...

顺便说一句 - 我假设你的文件中的第27+列是新名称,s因此,您还没有向我们展示一个示例。此外,您应该知道,一个简单的findstr会将目标字符串定位为文件中任何位置的子字符串 - 可以是新名称或旧名称。如果您调用findstr上的/B开关,则字符串将仅在行的最开始处匹配。

+0

感谢您的回复,但轻微的问题。我必须禁用DelayedExpansion,因为“!”在从文本文件复制的字符串内被删除。我认为这是一个问题,但我不知道替代方案是什么。 – Adamj200

+0

这就是为什么你应该提供样本代表性数据。它可以 - 也将在这种情况下 - 改变整个方法。 – Magoo