Batch file 文件名列表';这是目录中的最后20个字符

Batch file 文件名列表';这是目录中的最后20个字符,batch-file,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_201501

我需要使用批处理程序在目录中找到文件列表的最后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
当我在命令提示符中手动输入每个命令时,该命令工作正常。但是当我把所有的命令都放在一个批处理文件中时,它就不起作用了。请帮帮我这个代码可能有用

@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
)
(根据dbenham的评论更新;我真的不知道以前短路的起源在哪里…)

或与


这是一个纯批量解决方案。注意使用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
这里是一个使用混合JScript/批处理实用程序的单行程序,它通过正则表达式替换重命名文件。它是纯脚本,从XP开始在任何Windows机器上本机运行

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

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

您的第一个代码已完全中断-
%%f
对子例程不可见。如果任何文件名包含
,则第二个代码将失败。看起来不错,除非文件名包含
(不太可能,但也可能发生)此外,应使用PUSHD或CD/D。@dbenham我按照您的建议用PUSHD更改了CD。
@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 "^.*?({.{1,20})$" $1 /list /p "C:\Users\SENTHLRAJA\Desktop\Remya" >"C:\Users\SENTHLRAJA\Desktop\Remya\log\output.txt"