我正在批量提取屏幕快照,以获取我们计划在正在使用的试管站点上使用的内容。
每个内容的jpeg文件的标签如下:
6c82c0239f6eb839-1
6c82c0239f6eb839-2
all the way to 120
每个内容的文件名不同
a82384e2c46ba4af-1
a82384e2c46ba4af-2
etc.
它们都将被提取到一个单一文件夹中。
因此,我基本上需要一个批处理文件,该文件将基于内容名称创建文件夹(不带破折号和数字),并使用内容名称移动文件夹中的所有120 jpeg。
例如:
创建名为6c82c0239f6eb839的文件夹,并
将6c82c0239f6eb839-1到6c82c0239f6eb839-120移到创建的文件夹中。
我看到了另一个带有以下批处理文件的线程。它几乎是我想要的,但是文件夹名称只有3个字符长,文件被复制到新创建的文件夹中而不是移动它们。
@echo off
SetLocal EnableDelayedExpansion
for /F "delims=" %%a in ('dir /b *.jpeg') do (
set Name=%%a
set Folder=!Name:~0,3!
xcopy /y "%%a" !Folder!\
)
有人可以更改此设置,使其显示完整的文件名,而不显示文件夹的破折号和编号,并在其各自的文件夹中移动文件而不是复制文件吗?
谢谢
答案 0 :(得分:0)
如果仅尝试将正确的jpeg
复制到正确的文件夹,则可以执行以下操作:
@echo off
SetLocal EnableDelayedExpansion
CD <CORRECT ROOT PATH>
for /F "delims=" %%a in ('dir /b *.jpeg') do (
set Name=%%a
REM I presume all the files have 16 characters before the dash
set Folder=!Name:~0,16!
IF NOT EXIST !Folder! MKDIR !FOLDER!
xcopy /y "%%a" !Folder!\
)
我无法测试。
答案 1 :(得分:0)
@echo off
setlocal
@rem Get each jpeg file.
for /F "delims=" %%A in ('2^>nul dir /b *.jpeg') do (
rem Get filename as token before the dash.
for /f "delims=-" %%B in ("%%~A") do (
rem Make dir if needed.
if not exist "%%~B" md "%%~B"
rem Check if isdir.
2>nul pushd "%%~B" && popd
if errorlevel 1 (
>&2 echo Failed isdir "%%~B".
) else (
rem Do the move operation.
>nul move /y "%%~A" "%%~B"
if errorlevel 1 (
>&2 echo Failed move "%%~A" to "%%~B"
)
)
)
)
exit /b %errorlevel%
该代码的注释很好,因此如果您想了解
通过将@echo off
更改为@echo on
来评估代码。
%errorlevel%
之后不能使用exit /b
必填项,但会让您知道errorlevel
是什么
使用@echo on
时。
pushd
测试目录
(即使它是一个符号链接)。
检查errorlevel
以确定是否回显
错误消息或执行move
。
由于for
循环变量是直接使用的,因此使用
不需要enabledelayedexpansion
。
许多命令都支持/?
的参数以获取帮助
关于命令。即move /?
。
答案 2 :(得分:0)
首先,对于我的第一篇文章,我谨此致歉。
micheal_heath的回答解决了我的问题。
此外,我碰巧在另一个也有效的站点上由用户Salmon Trout找到了这篇文章。
Batch file to make folders with part of file name and then copy files
@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "tokens=1* delims=_" %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! does not exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
pause
我刚刚更改了以下行,删除了连字符和数字以正确创建文件名的文件夹。
for /f "tokens=1* delims=-***" %%D in ("!fname!") do set folname=%%D
我仍然不知道为什么以及如何使用这两种方法,但这对我来说是一个有趣的开始。我希望尝试解决类似问题的其他初学者可以从这篇文章中找到有用的东西。