从目录中获取文件的文件名并根据字符串操作进行更改,例如 BATCH 脚本中的字符串连接

Grab the filenames of the file from the directory and change as per string manipulation like String Concatination in BATCH script

@echo off
setlocal EnableDelayedExpansion
set "yourDir=D:\test"
set "yourExt=*.*"
set Name=ABCReport
set date=%date%
pushd %yourDir%
for %%a in (*.%yourExt%)  do (
  REM Do stuff with %%a here
  Set filename=%%a
  set NewFilename=%Name%_%filename:~4,8%
  REM echo !NewFilename:~4,8!
  echo !filename!
  echo !NewFilename!
)
popd
endlocal

我想从目录中获取文件名并根据需要更改文件名。

通过上面的脚本我得到了!NewFilename!如下

D:\test>"manipulate the filename.bat"

data_20181222.xlsx

ABCReport_~4,8

所以我想要的是 data_20181222.xlsx 文件 ABCReport_20181212

set NewFilename=%Name%_!filename:~4,8!

由于您要在循环内更改 filename 的值,因此您需要使用 !var! 来访问 changed 名称。

由于 filename 在循环的 start 处没有值,因此 %filename:~4,8% 将变为 ~4,8 正如您所观察到的。

顺便说一句 - 这是合法的,但被认为是不好的做法,试图改变像 date.

这样的伪变量的值

enabledelayedexpansion却从不使用它? 我还假设您想在实际使用 ABCReport_..

设置名称之前删除 filename 的字符

我还设置了 mydate 变量,而不是操纵系统变量 date

@echo off
setlocal EnableDelayedExpansion
set "yourDir=D:\"
set "yourExt=*.*"
set Name=ABCReport
set mydate=%date%
pushd %yourDir%
for %%a in (*.%yourExt%)  do (
  REM Do stuff with %%a here
  set "filename=%%a"
  set NewFilename=!filename:~4,8!
  set NewFilename=!name!_!NewFilename!
  REM echo !NewFilename:~4,8!
  echo !filename!
  echo !NewFilename!
 )
popd
endlocal