我需要使用批处理程序在目录中找到最后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
当我在命令提示符中手动输入每个命令时,此命令正常工作。但是当我将所有命令放在一个批处理文件中时,它不起作用。请帮帮我
答案 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