我正在尝试将文件移动到与文件名相同的目录(不包括扩展名),并在目录名的末尾添加单词footage
:
例如:
文件Graduation 2014.mkv
应移至文件夹Graduation 2014 Footage
文件Graduation 2015.mkv
应移至文件夹Graduation 2015 Footage
等
这是我尝试过的:
@echo off
for %%A in (*.mkv) do (
move "%%A" "%%~nA:~0,-8"
)
pause`
我收到以下错误:
文件名,目录名或卷标语法不正确。*
答案 0 :(得分:1)
我仅根据您问题中的这一行发布此答案。
尝试将文件(.mkv)移动到名称相同的文件夹中,但后8个字符除外。
我相信您应该只是这样做,然后让脚本为您创建文件夹:
@echo off
for %%i in (*.mkv) do (
mkdir "%%~ni Footage">nul 2>&1
move "%%i" "%%~ni Footage"
)
pause
或者如果您坚持不让脚本创建文件夹,只需执行以下操作:
@for %%i in (*.mkv) do @move "%%i" "%%~ni Footage"
答案 1 :(得分:1)
这个简单的解决方案对我有用。
以下是文件夹名称的示例:
File1_ext
12345_5678
43226343_12
224356434
File2_ext
File3_ext
Folder_exc
File4_ext
Ect-Hello
输出树:
C:.
│ Move.bat
│
├───12345_5678
├───224356434
├───43226343_12
├───Ect-Hello
├───File1_ext
│ File1.mkv
│
├───File2_ext
│ File2.mkv
│
├───File3_ext
│ File3.mkv
│
├───File4_ext
│ File4.mkv
│
└───Folder_exc
批处理脚本:
@echo off
@setlocal enabledelayedexpansion
Rem | Get File Name
FOR %%A IN (*.mkv) do (
Set "FileExt=%%~xA"
Set "FileName=%%~nA"
Rem | Get Folder Name
for /f "tokens=*" %%B in ('dir /b /a:d^| find /i "!FileName!"') do (
Move "!FileName!!FileExt!" "%~dp0%%B"
)
)
pause
答案 2 :(得分:0)
我建议以与其他人稍有不同的方式来做到这一点。 Gerhard Barnard和John Kens建议对所有for
文件进行简单的*.mkv
循环。但是,如果有隐藏文件,这将不起作用。您可能有另一种非常通用的解决方案:
@echo off
for /F "delims=" %%A IN ('dir /b /a-d "C:\some\path\to\mkvs" *.mkv') do (
attrib -h "%%~fA" >nul 2>&1
if not exist "%%~dpnA Footage\" md "%%~dpnA"
move "%%~fA" "%%~dpnA Footage\"
)
由于我们使用完整路径,因此这肯定更安全。 if exist
在这里可能毫无意义,因为您可以这样做:
@echo off
for /F "delims=" %%A IN ('dir /b /a-d "C:\some\path\to\mkvs" *.mkv') do (
attrib -h "%%~fA" >nul 2>&1
md "%%~dpnA" >nul 2>&1
move "%%~fA" "%%~dpnA Footage\"
)
这意味着将所有输出(错误和STDOUT)重定向到nul
,因此将其隐藏。