2016-06-07 96 views
0

我做了批处理文件,它复制3个文件,需要删除最后33个字符来重命名它。复制工作正常,但删除最后33个字符不......我在网上看到了更多,然后尝试一切,但没有任何工作到目前为止。批处理文件删除文件名的X个字符

我的批处理文件是这样的:

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

我想已经:

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

另一个错误的尝试:在 集FOLDER_PATH = XXXX 为%%˚F (%FOLDER_PATH%*)do if %% f neq%〜nx0( set“filename = %%〜nf” ren“%% f”“!filename:〜0,-33!%%〜xf” ) 系统找不到指定的文件 –

+0

再次执行'%fname%',但使用[delayed expansion](http://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set)this时间。 – SomethingDark

回答

0

从信息我到了这里,试试这个:

@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 
+0

工作很棒!谢谢:-) –

+0

现在我得到了不同的问题...这个代码单独工作,但当我把它放在我的复制代码下它停止工作 看起来像这样 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'')set set Youngest =% %a 对于/ f %% a in('dir/b“)%cd folder%% %c:\ Users \ tzahi.k \ Desktop \ testSource \ source2 \%Youngest% %folderpath%\ *。txt“')do( set”fname = %%〜na“ ren”%% a“”!fname:〜0,-33!.txt“ ) pause –

+0

@Tzahi Try我的代码在我上面编辑。 – Poypoyan

0

这里的批处理文件,你要运行:

@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 
+0

谢谢 但现在我有另一个错误说访问被拒绝... 任何建议? –

+0

很难说,但如果您最初是从网络或共享文件夹复制文件,则只读属性可能已由目标文件的复制操作设置。您可以使用** attrib -r * .txt **命令启动批处理文件,以确保。 – Filipus

+0

我检查过它,但它只适用于第一个文件。 –

0

这应该工作

@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" 
) 
+0

抱歉,但两者都不起作用 –

相关问题