正主来也。
首先先唠叨一句,俗话说,天下文章一大抄。抄袭他人内容,我不反对,这可以说明被抄袭者的内容还是有一定知名度的(呵呵,自恋一下)。但麻烦某些人,如果您回答的内容不是自己的擅长领域,那么就不要瞎抄袭,否则就是在误导他人。
比如此问题的题主,明明问的是关于拷贝文件并重命名的问题,某些人却抄袭了一个创建快捷方式的答案,这抄的也太没水准了。美其名曰还是行家用户呢,简直就是混的。会被别人笑话的。
好了,言归正传。正式答题。
@echo off & title 拷贝文件并重命名 By 依梦琴瑶
::预设文件最终保存的主目录,末尾无需添加斜杆
set Sav=E:
set "Src=%~1"
if not defined Src (
echo, & echo 请拖动文件夹到脚本文件上,来激活脚本。
echo, & pause & exit
)
dir /ad "%Src%" >nul 2>nul || (
echo, & echo 您拖动的不是文件夹,请重新操作。
echo, & pause & exit
)
cd /d "%Src%"
for /r %%a in (*.mp4) do (
set "FP=%%~dpa"
call :DoCopy "%%FP:~,-1%%" "%%~a"
)
pause
exit
:DoCopy
for %%i in ("%~1") do set "Name=%%~nxi"
for %%i in ("%Src%") do call set "NFP=%Sav%\%%~nxi\%%FP:%Src%\=%%"
echo f|xcopy "%~2" "%NFP%%Name%%~nx2"
goto :eof
代码已经过测试,虽然在我的电脑上测试通过,但您正式使用前,请先找一些不重要的文件进行测试一下,以免重要文件丢失。
不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为xx.bat,编码选ANSI
<# :
cls
@echo off
rem 将一个文件夹下的mp4文件按照原有的目录结构复制/拷贝到了一个新的文件夹里并在文件名称前面添加文件所在的文件夹名称
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default)))"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$oldfolder='d:\xxx';
$newfolder='e:\待改名';
if(-not (test-path -liter $oldfolder)){write-host ('"'+$oldfolder+'" not found');exit;};
$files=@(dir -liter $oldfolder -recurse|?{(@('.mp4') -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
$newpath=$newfolder+$files[$i].Directory.FullName.Substring($oldfolder.length);
$newfile=$newpath+'\'+$files[$i].Directory.Name+$files[$i].Name;
if(-not (test-path -liter $newpath)){[void](md $newpath -force)};
write-host ($files[$i].FullName+' --> '+$newfile);
cp -liter $files[$i].FullName $newfile -force;
}
@echo off & title 批量拷贝目录并创建快捷方式 By 依梦琴瑶
cd /d %~dp0
setlocal enabledelayedexpansion
::设置源文件夹路径
set Src_Dir=ABC
::设置快捷方式存放路径,不存在时会自动创建
set Lnk_Dir=CDE
::设置拷贝后的文件夹前缀名
set Tgt_Dir=XYZ
:InputCount
set /p Count=请输入拷贝次数,回车确认:
if not defined Count (
goto InputError
) else (
Call :CheckInput
)
:NextStart
if %Count% lss 0 (
goto InputError
) else (
if %Count% gtr 99 (
goto InputError
)
)
echo, & call :CreatLnkMakeTool
for %%a in ("%Lnk_Dir%") do (
if not exist "%%~fa" md "%%~fa"
set "Lnk_Dir=%%~fa"
)
set /a Count+=100
for /l %%a in (101,1,%Count%) do (
set "Num=%%~a"
if not exist "%Tgt_Dir% !Num:~1!\terminal.exe" xcopy /s/e "%Src_Dir%" "%Tgt_Dir% !Num:~1!\" >nul
cscript /nologo MakeLnk.vbs "%Lnk_Dir%\!Num:~1!.lnk" "%~dp0%Tgt_Dir% !Num:~1!\terminal.exe" "%~dp0%Tgt_Dir% !Num:~1!" "!Num:~1!.lnk"
)
del /f /q MakeLnk.vbs
echo, & echo 本次处理已完成,请按任意键退出。
pause>nul & exit
:CheckInput
echo %Count%|findstr /c:" " >nul && (
goto InputError
) || (
echo %Count%|findstr ^[0-9][0-9]*$ >nul && (
goto NextStart
) || (
goto InputError
)
)
goto :eof
:InputError
echo, & set "Count="
echo 请务必输入不小于 1 不大于 99 的纯数字,且不能为空或有空格。
ping 127.0.0.1 -n "2">nul
cls & goto InputCount
:CreatLnkMakeTool
(echo Set WshShell = WScript.CreateObject^("WScript.Shell"^)
echo Set oShellLink = WshShell.CreateShortcut^(WScript.Arguments^(0^)^)
echo oShellLink.TargetPath = Chr^(34^) ^& WScript.Arguments^(1^) ^& Chr^(34^)
echo oShellLink.Arguments = "/portable"
echo oShellLink.WorkingDirectory = WScript.Arguments^(2^)
echo oShellLink.Save
echo WScript.Echo "快捷方式 " ^& WScript.Arguments^(3^) ^& " 已创建。")>MakeLnk.vbs
goto :eof