Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. (http://forum.oszone.net/showthread.php?t=197848)

OSArev 27-01-2011 22:58 1598768

Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла.
 
Доброго здоровья...
Есть 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 29-01-2011 01:44 1599572

Упорно поковырявшись, просмотрев много примеров и прочитав немного полезной информации, дописал 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 30-01-2011 11:58 1600314

Вот, то же самоё на 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-х файлов. Или это особенности операционной системы(может у меня, что-то не работает?) или я чего-то не догоняю.
Объясните, пожалуйста, если у кого-нибудь найдётся свободное время и желание.
Заранее благодарен...


Время: 05:53.

Время: 05:53.
© OSzone.net 2001-