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

Batch file 批处理文件删除文件名的X个字符,batch-file,file-rename,batch-rename,Batch File,File Rename,Batch Rename,我做了一个批处理文件,它复制了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" 以下是您希

我做了一个批处理文件,它复制了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"
)

尝试时出现另一个错误:在(%FOLDER\u PATH%%*)中为%%f设置文件夹\u PATH=XXXX如果%%f neq%~nx0(设置“filename=%%nf”ren%%f”“!filename:~0,-33!%%~xf”),系统无法再次在
%fname%%
中找到指定的文件,但请使用此时间。谢谢,但现在我遇到另一个错误,说访问被拒绝。。。有什么建议吗?很难说,但如果您最初是从网络或共享文件夹复制文件,则目标文件的复制操作可能已设置只读属性。您可以使用attrib-r*.txt命令启动批处理文件以确保。什么仅适用于第一个文件?批处理文件还是Attrib命令?在第一个文件之后会出现什么错误?仍然拒绝访问?您在批处理文件中的何处添加了attrib命令?现在我遇到了不同的问题…此代码单独工作正常,但当我将其放在复制代码下时,其停止工作的方式如下:set folderpath=C:\Users\tzahi.k\Desktop\testSource\des for/F“delims=“%%a in('dir/b/od”C:\Users\tzahi.k\Desktop\testSource\source2*.txt'))在('dir/b”%folderpath%*.txt“)中为/f%%a设置最年轻的%%a xcopy/y“C:\Users\tzahi.k\Desktop\testSource\source2\%mineet%%%folderpath%cd%folderpath%”执行(设置“fname=%~na“ren”%%a”“!fname:~0,-33!.txt”)暂停