batch-file - 批量移动文件到文件夹。文件夹根据文件名命名
问题描述
试图找到可以做到这一点的蝙蝠,但没有运气。由于我对批处理编码的了解非常有限,我不知道从哪里开始编辑类似的现有代码。
我在一个文件夹中有文件,如下所示:
\\NAS\ART\1234.pdf
\\NAS\ART\1235.ai
\\NAS\ART\1236.eps
我想将这些文件移动到服务器上的另一个文件夹,其中文件夹结构如下:
\\NAS\Art\1234\Original\1234.pdf
\\NAS\Art\1235\Original\1235.ai
\\NAS\Art\1236\Original\1236.eps
它会将文件放入文件名文件夹的原始文件夹中。对不起,如果这令人困惑。
我发现这与我想要的很接近,但减去了字符的删除。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*.xml" '
) DO (
FOR /f "tokens=1delims=_-" %%b IN ("%%a") DO (
FOR /f "delims=" %%d IN (
'dir /b /ad "%destdir%\*%%b*" '
) DO (
ECHO(MOVE "%%a" "%destdir%\%%d\"
)
)
)
GOTO :EOF
解决方案
您可以使用此批处理文件将所有非隐藏文件移动\\NAS\ART\
到之前创建的合适子目录中(如果不存在),并覆盖目标目录中具有相同名称的文件。
@echo off
for %%I in ("\\NAS\ART\*") do (
if not "%%I" == "%~f0" (
md "%%~dpnI\Original" 2>nul
move /Y "%%I" "%%~dpnI\Original\"
)
)
IF条件避免将批处理文件也存储在目录\\NAS\ART\
中,如果肯定不是这种情况,可以将其删除。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
echo /?
for /?
if /?
md /?
move /?
另请阅读有关使用命令重定向运算符的Microsoft 文章,了解2>nul
用于抑制命令MD输出的错误消息以处理目录上的STDERR以通过将此错误消息重定向到设备NUL来创建已经存在的说明。
推荐阅读
- performance - 如何通过静态分析比较两个代码之间的性能?
- nginx - Nginx URL 屏蔽 http 到 https
- kubernetes - 舵图。如何传递带有多个点的环境值?
- c# - 响应返回 302(重定向)但 Location 属性为空
- jwt - 使用 Bearer 和 TLS 1.2 刷新令牌的含义
- api - Cloudfare 正在阻止对 https://api.blockchain.info/ticker 的 API 调用,它返回 403,并重新验证挑战
- node.js - 尝试使用 Passport.js 和 AJAX 注册用户时,服务器返回“错误:无法将用户序列化到会话中”
- elasticsearch - Elasticsearch:意大利分析仪的问题
- javascript - 在 Livewire 弹出表单中添加名称不起作用
- php - 方法...应该返回数组但返回数组('key1'=>SomeObject|null,'key2'=>SomeObject2|null)