从目录中获取文件的文件名并根据字符串操作进行更改,例如 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
@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