文件名列表目录中的最后20个字符

时间:2015-03-15 19:27:55

标签: batch-file

我需要使用批处理程序在目录中找到最后20个字符的文件列表,并且需要将其写入文本文件中。文件名的示例列表如下所示

PIOPROD.FromXMLInput_20150204082113__0007.txt
PIOPROD.GVRBOS_TEV_15351_20150209_202729_048064_00_048064_0005_20150209_25GGI_1_0250_FOD_607_2_20150210142010__0979.txt
PIOPROD.VERMAUSZUG_14803_20150116_195001_401118_401118_0501_01_01_0000_0501_00_01_20150213020051__0489.txt

我有一个示例.bat程序,但它不起作用。请帮助我

@ECHO ON
cd C:\Users\SENTHLRAJA\Desktop\Remya
for %%f in (*.txt) do (
    SET var2=%f:~-20%
    echo %var2% > C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
    PAUSE
)
PAUSE

当我在命令提示符中手动输入每个命令时,此命令正常工作。但是当我将所有命令放在一个批处理文件中时,它不起作用。请帮帮我

3 个答案:

答案 0 :(得分:1)

此代码可能有效。

@ECHO OFF
SETLOCAL enabledelayedexpansion
PUSHD C:\Users\SENTHLRAJA\Desktop\Remya
SET "fFile="
FOR %%f in (*.txt) do (
    SET "fFile=%%~nf"
    SET "var2=!fFile:~-20!" 
    ECHO !var2! >> C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
)

答案 1 :(得分:1)

这是一个纯批量解决方案。注意使用PUSHD而不是CD。 (本来可以使用cd /d)。还可以在循环内打开和关闭延迟扩展,以保护文件名中的任何潜在!

@echo off
setlocal disableDelayedExpansion
pushd "c:\users\senthlraja\desktop\remya"
>"log\output.txt" (
  for %%F in (*.txt) do (
    set "file=%%F"
    setlocal enableDelayedExpansion
    echo !file:~-20!
    endlocal
  )
)
popd

这是使用JREN.BAT的单行内容 - 一种混合JScript /批处理实用程序,它通过正则表达式替换重命名文件。它是纯脚本,可​​以在XP以后的任何Windows机器上本机运行。

jren "^.*?({.{1,20})$" $1 /list /p "C:\Users\SENTHLRAJA\Desktop\Remya" >"C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt"

如果将命令放在另一个批处理脚本中,请使用CALL JREN。

答案 2 :(得分:0)

根据dbenham的评论subroutine call更新;真的我不知道以前短路的起源在哪里......)

@ECHO OFF
cd C:\Users\SENTHLRAJA\Desktop\Remya
rem type nul>C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
for %%f in (*.txt) do (
    SET "var2=%%~nxf"
    Call :DoItForMe
)
PAUSE
goto :DoNext

:DoItForMe
    echo %var2:~-20%>>C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
    echo %var2:~-20%
    rem PAUSE
goto :eof

:DoNext

Delayed Expansion Variables within loops

@ECHO OFF
@SETLOCAL enableextensions enabledelayedexpansion
cd C:\Users\SENTHLRAJA\Desktop\Remya
rem type nul>C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
for %%f in (*.txt) do (
    SET "var2=%%~nxf"
    echo !var2:~-20!>>C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt
    echo !var2:~-20!
    PAUSE
)
PAUSE