CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла.

Ответить
Аватара пользователя
OSArev

CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла.

Сообщение OSArev »

Доброго здоровья...

Есть BATничек:



Код:

Код: Выделить всё

echo off 
Set MainDir=%~dp0 
echo "%~n1">"%~n1.txt"|findstr /v "%~n1" %~n1.txt > %~n1.txt|md "%~n1" 
move "%~n1.txt" "%~n1"
echo %1|mkdir "%~n1"
move "%1" "%~n1"

Создаёт текстовый документ по имени выбранного файла, перемещает документ и выбранный файл в созданную папку по имени выбранного файла.Но он работает только для одного файла.При прописке в контекстное меню корректно работает для 3-х файлов.

Вопрос, к Уважаемым знатокам-программистам:"Что или как нужно добавить в BAT-ник, что бы он заработал для многих файлов.

Простите, если этот вопрос Вас смешит или раздражает, заинтересовался BAT и VBS совсем недавно, очень интересно. Буду рад любому совету.Можно варианты на VBS...

Заранее благодарен.Сергей.
Аватара пользователя
OSArev

Re: CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла.

Сообщение OSArev »

Упорно поковырявшись, просмотрев много примеров и прочитав немного полезной информации, дописал BATник.

Для меня это неожиданно, но вот так -



Код:

Код: Выделить всё

@Echo off
if exist "%~n1\%~n1.txt" (
:DEFAULT
 Echo MsgBox "Объект  ""%~n1\%~n1.txt"" , уже существует !" > msg.vbs 
 wscript msg.vbs 
 del msg.vbs ( 
 goto BREAK10
)else if not exist "%~n1\%~n1.txt" (
 echo "%~n1">"%~n1.txt"|findstr /v "%~n1" "%~n1.txt">"%~n1.txt"|md "%~n1"
 move "%~n1.txt" "%~n1"
) else (
  goto DEFAULT
)
:BREAK10
if exist "%~n1\%~nx1" (
:DEFAULT
 Echo MsgBox "Объект  ""%~n1\%~nx1"" , уже существует !" > msg.vbs 
 wscript msg.vbs 
 del msg.vbs (
 goto BREAK10
)else if not exist "%~dp0\%~n1\%~nx1" (
 echo "%~nx1"|mkdir "%~n1"
 move "%~nx1" "%~n1"
) else (
  goto DEFAULT
)
:BREAK10

-BATник заработал как надо. Единственное, что я пока понял, он работает только для 22-х файлов, что в принципе для работы из контекстного меню и для моих целей вполне достаточно. Ещё не смог пока прикрутить сюда открытие .txt при создании(очень удобно-сразу писать) и открытие созданной папки при проверке, если найден родительский объект(удобно, для просмотра)Будем учиться.

В принципе вопрос решён...
Аватара пользователя
OSArev

Re: CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла.

Сообщение OSArev »

Вот, то же самоё на VBS:



Код:

Код: Выделить всё

Dim objWshShell, strFileName, strFullFileName
Dim strFullFolderName
Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
 If WScript.Arguments.Count = 1 Then
   sFile   = WScript.Arguments.Item(0)
   Set fso = CreateObject("Scripting.FileSystemObject")
   strFileName = sFile
 End If
STR = strFileName
   intLength = Len(str) 
   intCharacters = intLength - 4 
   strNew = Left(str, intCharacters) 
   strFullFolderName = objFSO.BuildPath(objWshShell.SpecialFolders("C , D ,"), strNew)
 If objFSO.FolderExists(strFullFolderName) Then
result = MsgBox ("Папка """& strFullFolderName &""" уже существует."  & Chr(10) & "Выберите действие:" & Chr(10) &  " "  & Chr(10) & """Да"" - переименовать папку в """& strFullFolderName & "_OLD""""" & Chr(10) & "и продолжить работу."  & Chr(10) & """Нет"" - окрыть существующую папку для просмотра." & Chr(10) & """Отмена"" - завершить работу.", vbYesNoCancel, "Выбор действия.")
 Select Case result
  Case vbYes
 if objFSO.FolderExists(strFullFolderName & "_OLD") Then
    objFSO.DeleteFolder strFullFolderName & "_OLD"
    objFSO.MoveFolder strFullFolderName , strFullFolderName & "_OLD"
    objFSO.CreateFolder strFullFolderName
      WScript.Sleep 500 
 Else 
    objFSO.MoveFolder strFullFolderName , strFullFolderName & "_OLD"
    objFSO.CreateFolder strFullFolderName
      WScript.Sleep 500 
 end if
  Case vbNo
   objWshShell.Run(strFullFolderName & "\") 
      WScript.Quit 0  
  Case vbCancel
      WScript.Quit 0  
 End Select 
 Else
    objFSO.CreateFolder strFullFolderName   ' 40-стр
 End If
   strFullFileName = objFSO.BuildPath(objWshShell.SpecialFolders("C , D ,"), strNew)
    objFSO.CreateTextFile strFullFileName & ".txt"
    objFSO.MoveFile strFullFileName & ".txt" , strFullFileName & "\"
   strFullFileName = objFSO.BuildPath(objWshShell.SpecialFolders("C , D ,"), strFileName)
    objFSO.MoveFile strFullFileName , strFullFolderName & "\"
'Можем открыть папку для просмотра, если надо:
'    objWshShell.Run("Explorer" &" " & strFullFolderName & "\")
Set objWshShell = Nothing
Set objFSO      = Nothing
  WScript.Quit 0

Не понятно только - почему работает только для 22-х файлов. Или это особенности операционной системы(может у меня, что-то не работает?) или я чего-то не догоняю.

Объясните, пожалуйста, если у кого-нибудь найдётся свободное время и желание.

Заранее благодарен...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»