批处理文件删除文件名的 X 个字符

batch file remove X characters of filename

我做了批处理文件,它复制了 3 个文件,需要通过删除最后 33 个字符来重命名它。该副本工作正常,但删除最后 33 个字符没有...我在网上看到了不止一个答案并尝试了所有但到目前为止没有任何效果。

我的批处理文件如下所示:

for /f "delims=" %%i in ("my folder")  do (
    ren "%%i" "%i:~0,-33%".txt
)

我已经试过了:

set fName=%%i
ren "%fName%" "%fName:~0,-33%.txt"

这是您想要的批处理文件运行:

@echo off
Setlocal EnableDelayedExpansion

@for /f "delims=" %%i in ('dir /b *.txt')  do (
    set fname=%%~ni
    set fname=!fname:~0,-33!.txt
    ren "%%i" "!fname!"
)

endlocal

根据我在这里得到的信息,试试这个:

@echo off
setlocal enabledelayedexpansion

set "folderpath=[Your Folder Here...]"
cd %folderpath%
for /f %%a in ('dir /b "*.txt"') do (
   set "fname=%%~na"
   ren "%%a" "!fname:~0,-33!.txt"
)
endlocal

这与上面的答案类似。您应该确保批处理文件在文件夹之外。

编辑。 在处理 FOR 和 IF 内部形成的变量时,使用延迟扩展(即 !var!,而不是 %var%)。无论如何,这是固定代码:

@echo off
setlocal enabledelayedexpansion

::NO Last Backslash...
set "sourcepath=C:\Users\tzahi.k\Desktop\testSource\source2"
set "folderpath=C:\Users\tzahi.k\Desktop\testSource\des"

for /F "delims=" %%a in ('dir /b /od "%sourcepath%\*.txt"') do (
   set "youngest=%%a"
   xcopy /y "%sourcepath%\!youngest!" "%folderpath%"
)

cd /d %folderpath%
for /f %%a in ('dir /b "*.txt"') do (
    set "fname=%%~na"
    ren "%%a" "!fname:~0,-33!.txt"
)
endlocal
pause

这应该有效

@echo off
setlocal enabledelayedexpansion
set FOLDER_PATH=C:\Some\Path\
for %%f in (%FOLDER_PATH%*) do if %%f neq %~nx0 (
    set "filename=%%~nf"
    ren "%%f" "!filename:~0,-33!%%~xf"
)
PAUSE

或者更好

@echo off & setLocal enableDELAYedeXpansion
for /f "tokens=* delims= " %%a in ('dir /b *.txt') do (
set F=%%~Na
set F=!F:~0,33!
move /y "%%a" "!F!%%~Xa"
)