2

ディレクトリを通過し、すべての *.txt ファイルを dest フォルダーに移動して、txt ファイルの最初の文字から開始する DOS バッチ プロセスを作成したいと考えています。

元。
abc.txt はフォルダー "a"
に移動し、def.txt はフォルダー "d" に移動します

4

6 に答える 6

4

コマンドラインから:

for %i in (*.txt) do (set FOLDER=%i & move %i %FOLDER:~0,1%)

バッチファイルでは、次のように%を2倍にする必要があります。

for %%i in (*.txt) do (set FOLDER=%%i & move %%i %FOLDER:~0,1%)
于 2009-08-07T21:45:09.513 に答える
0

問題のポイントは最初の文字を抽出することだと思います。

〜charを使用して、ファイル名の最初の文字を抽出できます

set str=filename
echo %str:~0,1%
f
于 2009-08-07T21:45:35.767 に答える
0

biterscripting chex コマンド (文字抽出プログラム)を使用して、ファイル名の最初の文字を抽出できます。これがスクリプトです。ファイルが C:\My Directory にあるとします。

# Script move1.txt
# Change directory to My Directory.
cd "C:\My Directory"

# Collect a list of *.txt files.
var str list ; lf -n "*.txt" > $list

# Go thru files one by one.
while ($list <> "")
do

    # Get the next file.
    var str file ; lex "1" $list > $file

    # $file now has full path of a found *.txt file. Get just the file name.
    var str filename ; stex -p "^/^l[" $file > $filename

    # $filename has just the file name. Get the first character.
    var str firstchar ; chex -p "1" $filename > $firstchar

    # $firstchar now has the first char of file name. The folder where we
    # want to move this file is, then, C:\Destimation Folder\$firstchar .
    var str destfolder ; set $destfolder = "C:\Destination Folder\"+$firstchar

    # Move $file to $destfolder.
    system move ("\""+$file+"\"") ("\""+$destfolder+"\"")

done

スクリプトはバイタースクリプティング ( http://www.biterscripting.com ) です。試すには、スクリプトを C:\Scripts\move1.txt として保存し、biterscripting を開始して、次のコマンドを入力します。

script move1.txt

スクリプトを定期的に実行する必要がある場合は、タスク スケジューラで次のコマンドをスケジュールします。

"C:\biterScripting\biterScripting.exe" "move1.txt"

私はスクリプトをテストしていません。サンプル ファイルでテストしてください。「C:\My Directory」と「C:\Destination Folder」を正しい値に変更してください。ファイル名とパスには必ず二重引用符を使用してください。

于 2009-08-26T15:42:17.533 に答える
0

これはどうですか?

一般的な形式: for %a in (abcdefghijklmnopqrstu vwxyz) do if not exist %a\nul md %a & if exist %a* move %a* %a

この mod は txt ファイルのみを実行します (OP ごと): ... %a*.txt が存在する場合は %a*.txt %a を移動します

または、コマンドラインで拡張子の一致を許可するために、「... if exist %%a*%1 move %%a*%1 %%a」を実行するようにバットでこれを強化できます。これにはおそらく %1 にドットが必要です (今はテストしたくありません。これが問題になる場合は、いつでも if%1!==! を使用して、一般的な形式と %1 固有の形式のどちらかを選択できます。ドットはすでに提供されています。

もちろん、%a はコマンドライン用であり、バットの場合は通常どおり %s を 2 倍にします (%a -> %%a)。

この解決策は、ファイル名にスペースが含まれるエラーを回避しますが、すべての文字のサブディレクトリが作成されます (その特定の文字で始まるファイルがなかったとしても)。

そして、上の元の行を入力するよりも、これを入力するのに時間がかかりました... :-)

于 2011-09-22T04:37:03.163 に答える
0

現在のフォルダー内のすべての TSV ファイルをカウントします。

for /f "delims=|" %%f in ('dir *.tsv /b') do (
echo %%~nf
findstr /R /N "^" %%f | find /C ":"
)
于 2012-12-03T04:15:00.813 に答える
-1
copy sourcepath\a*.txt destinationpath\a

コピー元パス\b*.txt コピー先パス\b

于 2009-08-07T21:42:57.397 に答える