我正在尝试制作一个批处理文件,它将:
要求提供目录(包含许多文件)
请求第二个目录(这是批处理为每个文件创建目录的位置,然后将每个文件复制到自己的目录中)
要从创建的目录的右侧删除的字符数。 (例如,两个文档'NewDoc_Ver1'和'NewDoc_Ver2'都将被复制到同一目录'NewDoc'中。)
以下是一些可能有用的类似问题。
https://superuser.com/questions/1138283/batch-script-for-moving-files-to-the-same-name-folder
How do you get the string length in a batch file?
batch files calling %~1 and getting the variable's current value/string
https://ss64.com/nt/syntax-substring.html
我目前仍然试图让'String Left'与动态数字一起使用。 (我还没看过如何输入用户输入) 任何帮助都会很棒。
@echo off
setlocal enabledelayedexpansion
set folderpath=C:\Users\james.shaw\Desktop\R2
for %%f in (%folderpath%\*.*) do (
set "foldername=%%~nf"
set f1=!foldername!
call :strlen folderlength foldername
REM set JS1=%%foldername:~0,!folderlength!%%
set JS1=!f1!:~0,!folderlength!
md !JS1!
REM md "!foldername:~0,!folderlength!!" >nul 2>&1
move "%%f" "!foldername:~0,!folderlength!!"
pause
)
goto :eof
:strlen <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
)
(
endlocal
set "%~1=%len%"
exit /b
)
更新
下面是我发现的一个类似于我正在寻找的(我丢失了Web URL),但是这只在批处理文件所在的目录中运行,并且不允许截断创建目录: 我仍然有兴趣了解我在最初的尝试中做错了什么。
@echo off
setlocal EnableDelayedExpansion
set RemoveStrings="[ www.AnnoyingSpam.com ]",
Rem RemoveStrings variable notes:
Rem Surround strings to remove with double quotes.
Rem Separate each separate string to remove with a comma.
goto :main
: trim_leading_spaces VariableName
setlocal EnableDelayedExpansion
set "_=!%~1!"
set _=%_:"=%
: trim_leading_spaces__while
if "%_:~0,1%"==" " ( set "_=%_:~1%"& goto :trim_leading_spaces__while)
endlocal & set "%~1=%_%"
goto :eof
: trim_trailing_spaces VariableName
setlocal EnableDelayedExpansion
set "_=!%~1!"
set _=%_:"=%
: trim_trailing_spaces__while
if "%_:~-1%"==" " ( set "_=%_:~0,-1%"& goto :trim_trailing_spaces__while)
endlocal & set "%~1=%_%"
goto :eof
: main
for /f "delims=" %%I in ( dir /b /a:-d ^| findstr /vixc:"%~nx0" ) do (
Set file = "%%~I"
for %%J in (%REMOVESTRINGS%) do set "file=!FILE:%%~J=!"
call :trim_leading_spaces file
call :trim_trailing_spaces file
for %%J in ("!FILE!") do set "NewDirName=%%~nJ"
md "!NEWDIRNAME!"
ren "%%~I" "!FILE!"
move "!FILE!" "!NEWDIRNAME!"
)
答案 0 :(得分:1)
根据你的例子判断:
NewDoc_Ver1
NewDoc_Ver2
您似乎可能有一个共同的分隔符,即_
如果情况确实如此,并且您只想在_
作为文件夹名称之前使用第一个单词,那么这可能会有所帮助。
@echo off
setlocal enabledelayedexpansion
cls
:input
set /p "input=1. Enter Source directory: "
if not exist "%input%" echo Invalid source: "%input%" enter valid path && goto :input
:output
set /p "output=2. Select Destination Directory: "
if not exist "%output%" echo Invalid Dest: "%output%" enter valid path && goto :output
for %%i in (%input%\*) do (
set "file=%%~nxi"
for /f "delims=_" %%a in ("!file!") do (
set "folder=%%a"
if not exist "!output!\!folder!" mkdir "!output!\!folder!"
copy /Y "!input!\!file!" "!output!\!folder!" >nul
echo Copied "!input!\!file!" to "!output!\!folder!\!file!"
)
)
<强>解释强>
这会提示用户输入source
目录。如果目录不存在,它将重新提示它,如果它存在,它将提示destination
目录,如果目标路径无效,则回显它并重新提示它。
接下来,我们将每个文件分配给变量名称%file%
,或者更确切地说是enabledelayedexpansion
案例!file!
,然后对于每个文件名,我们将其分割为{{1}并将名称的第一部分分配给_
。
现在我们只检查文件夹是否存在于先前用户指定的目标中,如果不存在,则创建它,然后将!folder!
中的每个文件复制到创建新文件夹的匹配目标目录中。
如果您的文件布局不符合您的示例,请提供适当的示例,我将修改我的答案。
答案 1 :(得分:1)
以下是您可以使用的示例脚本:
func numberOfSections(in tableView: UITableView) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = Bundle.main.loadNibNamed("StoresListHeaderView", owner: self, options: nil)?.first as! StoresListHeaderView;
return headerView;
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 170;
}
只要输入数据正确,这应该可以正常工作。
我希望您实施这些检查并验证输入数据,(您的最终用户可以输入他们想要的任何内容)