我有一个问题,希望你愿意回答。我在编写BASH脚本方面有相当多的经验,但对Windows脚本编程几乎一无所知。所以我的问题可能非常基础。我有一个脚本,要求用户输入并使用该输入创建两个目录。然后脚本将.mp3文件移动到新创建的目录中。到目前为止一切都很好。
问题是我想将新创建的目录(及其包含的文件)复制到我的MP3播放器。 (D:\ MUSIC),
然而,当我运行脚本时会发生什么,mp3文件被单独复制到目标目录 - 也就是说它们最终不是复制到它们的目录的副本,而只是在D:\中MUSIC目录。
换句话说,我最终得到: D:\ MUSIC \ file.mp3而不是D:\ MUSIC \ new_directory \ file.mp3
以下是我的剧本:如果你能给我一些关于我做错的线索,我将不胜感激。
谢谢,
GG
@echo off
set /p FOLDER= Name the folder
cd C:\Users\John\Music\iTunes\iTunes Media\Podcasts\"Coast to Coast AM Podcast"
MD %FOLDER%
Move *.mp3 %FOLDER%
Copy %FOLDER% D:\MUSIC
CD C:\Users\John\Music\iTunes\iTunes Media\Podcasts\"Darkness Radio"
MD %FOLDER%-DR
Move *.mp3 %UserInputName%-DR
Copy "%FOLDER%-DR" D:\MUSIC
答案 0 :(得分:0)
要使用今天的日期作为名称创建目录,请使用locale-independent method:
wmic path Win32_LocalTime get Day,Month,Year /format:table
日月年 2015年10月25日
要将其放入变量使用跳过标题行的for /f
parse-loop,将接下来的3个标记放入%% a,%% b,%% c,用0
填充MONTH和DAY,提取最后两位数字(01—>01
,011—>11
)。
for /f "tokens=1-3 skip=1" %%a in ('
wmic path Win32_LocalTime get Day^,Month^,Year /format:table
') do if not "%%c"=="" set "YEAR=%%c" & set "MONTH=0%%b" & set "DAY=0%%a"
set TODAY=%YEAR%.%MONTH:~-2%.%DAY:~-2%
2015年10月25日
注意:,
中的=
和for /f
需要使用^
进行转义,&
,|
也是如此,>
,<
(我们这里没有使用它们。)
现在让我们在普通for
循环中声明要处理的文件夹列表,每个项目将是:
没有路径的源文件夹名称 : 目标文件夹后缀,可以在:
分成两个新的循环变量:
for %%a in (
"Coast to Coast AM Podcast:"
"Darkness Radio:-DR"
"No colon here so the postfix will be empty too"
) do for /f "delims=: tokens=1,2" %%b in ("%%~a") do echo SRC: %%b, POSTFIX: %%c
SRC:从海岸到海岸AM播客,POSTFIX:
SRC:Darkness Radio,POSTFIX:-DR
SRC:这里没有冒号所以后缀也是空的,POSTFIX:
注意:默认情况下,要解析的文本必须加倍引用for /f %%a in ("some text") do
,但在我们的情况下,%%a
始终包含双引号字符串,因此我们可以使用{{1} }。
in (%%a)
会根据需要创建目标目录(最后注明xcopy /s "SOURCE" "TARGET\"
)。
最终代码:
\
注意:@echo off
set "COPY_FROM=%USERPROFILE%\Music\iTunes\iTunes Media\Podcasts"
set "COPY_TO=D:\MUSIC"
rem Use a locale-independent method of getting the date
for /f "tokens=1-3 skip=1" %%a in ('
wmic path Win32_LocalTime get Day^,Month^,Year /format:table
') do if not "%%c"=="" set "YEAR=%%c" & set "MONTH=0%%b" & set "DAY=0%%a"
set TODAY=%YEAR%.%MONTH:~-2%.%DAY:~-2%
for %%a in (
"Coast to Coast AM Podcast:"
"Darkness Radio:-DR"
) do for /f "delims=: tokens=1,2" %%b in (%%a) do (
xcopy /s /d /y "%COPY_FROM%\%%b\*.mp3" "%COPY_TO%\%TODAY%%%c\"
)
pause
仅复制较新的文件,xcopy /d
进程子目录,/s
以静默方式覆盖现有文件。