我正在寻找一个批处理脚本,如果它们的扩展名与子目录扩展名匹配,它会将文件从子目录移动到其父目录。
示例:
从.txt
directory parent\files.txt\
文件
"parent\files.txt\test.txt"
将成为"parent\test.txt"
从.zip
directory parent\files.zip\
文件
"parent\files.zip\test.zip"
将成为"parent\test.zip"
如果文件的扩展名与其子目录名的扩展名相同,我只想move
。子目录和任何其他内容必须保持不变。
这就是我现在所拥有的,但它只会删除我的文件:
@echo off
md temp
set view=
if "%view%"=="1" @echo on
color 72
mode con cols=30 lines=8
setlocal enableDelayedExpansion
set /p location_with_dirs=location:
echo:
type nul> ".\temp\folderlist.txt"
FOR /D %%G IN ("%location_with_dirs%\*") DO (
echo process file:
echo %%G
choice
if "%errorlevel%"=="1" echo %%G >> ".\temp\folderlist.txt"
cls
)
FOR /f "delims=" %%G in (".\temp\folderlist.txt") DO (
for %%F in (%%G\*.*) do move /Y %%F "%location_with_dirs%\"
rd %%G
)
del /f /q ".\temp\folderlist\*.txt"
答案 0 :(得分:0)
我相信会有很多方法可以达到这个目标,其中一个:
DECLARE @BadDesign table (ID int, Col1 varchar(200), Col2 varchar(200));
INSERT @BadDesign VALUES
(110,'450,2,50,110,600', '3,45,30,901,1001'),
(250,'2,250,300,1', '1,33,540,900'),
(45 ,'1,45,320', '200,444,600')
SELECT
B.*, Col1Value=b1.Item, Cal2Value = B2.Item
FROM
@BadDesign B
CROSS APPLY
(SELECT
rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), F.Item
FROM
dbo.SplitStringsOrdered(B.Col1, ',') F
) b1
CROSS APPLY
(SELECT
rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), F1.Item
FROM
dbo.SplitStringsOrdered(B.Col2, ',') F1
) b2
WHERE
b1.rn = b2.rn
只需将@CD /D "Parent" 2>Nul || Exit /B
@For /D %%A In (*) Do @If /I Not "%%~xA"=="" Move /-Y "%%A\*%%~xA">Nul
行Parent
更改为您父目录的完整路径或相对路径。
正如礼貌一样,这是一个希望改进你提供的代码中更重要部分的版本,(它忽略了进度条和颜色):
1